RestTemplate 是否同步 REST 调用?

Does RestTemplate synchronize REST calls?

我对 RestTemplate 的一件事很好奇。假设我有一个普通的 Spring 单例组件 bean RestService 和虚拟方法:

@Component
public class RestService {
   private final RestTemplate restTemplate;

   public String performRequest(HttpEntity request, URI url) {
      return restTemplate.exchange(url, HttpMethod.POST, request, String.class);
   }
}

现在线程 thread-1 与这个 bean 交互并等待休息响应。这是否意味着任何其他渴望通过此 bean 发出另一个请求的线程都将被卡住,直到 thread-1 释放 restTemplate?我试图在下面的数字上展示流程。

thread-1 ..request....execution..................response..
thread-N ---------request.......wait..............start execution...

thread-1 ..request....execution..................response..
thread-N ---------request.......execution....response...

也就是说。可以通过多线程调用将此类服务与 restTemplate 一起使用吗?它是否像图 1 那样工作? 1 或图。 2?

RestTemplate 是 thread-safe(带有免责声明),因此您可以像在代码中所做的那样在多个用户之间共享一个。他们不需要等待对方,事实上他们甚至不知道是否有其他请求在同时执行。

class 的 javadoc 没有描述它是 thread-safe,但代码仅使用局部变量,因此没有共享状态可竞争。

免责声明:它并非完全没有共享状态,因为您可以配置一些东西,例如 setMessageConverters()setErrorHandler() 等,但这些应该只配置一次。做网络事情的实际方法是 thread-safe.