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

标签 java http httpclient

任何人都可以帮我澄清 HttpClient 在多线程中的行为吗?

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

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.

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

最佳答案

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

还考虑在任何地方使用 ResponseHandlers;这极大地简化了资源和连接的释放。

关于java - 多线程和并发上下文中的 HttpClient 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163325/

相关文章:

java - 执行在 getOutputStream() 函数处自动停止 使用 servlet 推送通知

php - 如何将 "body"参数发送到HttpClient.get()?

java - 将参数注入(inject) Akka Props 和 Creator 实例

java - Mac OS X Lion 上的 IntelliJ IDEA 11 中未找到 M2_HOME

http - 使用文件服务器为我的单个 html 页面提供服务

python - 使用 Scapy 过滤 HTTP 数据包

Android:登录网站并使用 DefaultHttpClient 保留 session /cookie

java - 如何在java中创建图形对象?

java - 任何简单的 Java REST 教程?

rest - 如何使用不可变资源处理 PUT 端点