Java 多线程和并发上下文中的HttpClient行为

Java 多线程和并发上下文中的HttpClient行为,java,http,httpclient,Java,Http,Httpclient,有人能帮我澄清一下HttpClient在多线程中的行为吗 当我通过下面的代码创建HttpClient对象时,我应该在整个应用程序生命周期中全局保留该对象(在HttpClientdoc中建议使用此方法),还是每次我想执行Http连接(Get和Post)时都要创建该对象 确保Http连接不会相互阻塞并确保它们可以并发运行的最佳方法是什么?使用PoolgConnectionManager并配置每个路由所需的连接数(确保连接数与使用它们的线程数相同)。然后,您可以简单地在任何地方注入相同的httpcli

有人能帮我澄清一下
HttpClient
在多线程中的行为吗

当我通过下面的代码创建
HttpClient
对象时,我应该在整个应用程序生命周期中全局保留该对象(在
HttpClient
doc中建议使用此方法),还是每次我想执行Http连接(Get和Post)时都要创建该对象


确保Http连接不会相互阻塞并确保它们可以并发运行的最佳方法是什么?

使用PoolgConnectionManager并配置每个路由所需的连接数(确保连接数与使用它们的线程数相同)。然后,您可以简单地在任何地方注入相同的httpclient。我已经这样用了好几年了


也考虑到处使用响应处理器;这大大简化了资源和连接的释放。

我的建议是第二个,因为如果使用静态变量,对象的并发访问可能会引发异常或意外结果。在Jmeter(性能/负载测试工具)中,他们为不同的线程创建不同的对象。但若线程的数量很小,并且线程只执行只读操作,那个么可以将静态变量与同步方法一起使用。如果我说错了,请纠正我。您好,如果连接池有3个连接。但我的应用程序同时需要4个连接。HttpClient如何处理额外的一个?
HttpClient
是否创建一个临时连接,或者额外的连接必须等待/挂起,直到池具有空闲连接?Erm。。“每条路线”是什么意思?这是否意味着“每个应用程序生命周期”?网络路由。基本上,对于相同的路由,您可以重用连接。在httpclient释放到服务器的打开连接后,连接池尝试重用这些连接。这就是为什么池连接管理器很好用的原因。基本上,您可以配置希望它分发的最大连接数。如果超过这个数字,线程将最终等待连接被释放。您也可以为此设置一个超时,您将开始看到超时。通常,您希望连接的数量与线程的数量相同。
1)
Static HttpClient httpclient = HttpClientBuilder.create().build(); //so we can use this object in everywhere.

2) 
HttpClient httpclient = HttpClientBuilder.create().build(); //do this every time when we want to establish http connect.