首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致线程阻塞的Apache HttpComponents代码

导致线程阻塞的Apache HttpComponents代码
EN

Stack Overflow用户
提问于 2013-10-12 15:06:46
回答 2查看 1.2K关注 0票数 0

我目前正在运行一个程序,它将从一个使用Apache HttpComponents的网站下载源代码。我将下载很多(10,000年代),所以我使用多个线程来做这件事。

有时所有线程都会死(连接),有时它们不会。

代码语言:javascript
复制
CloseableHttpResponse response = httpClient.execute(httpget,context);

是问题所在。有谁知道我如何为这个行设置一个超时,或者为什么这一行阻塞线程执行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-14 10:28:57

线程陷入i/o操作可能有各种原因,最有可能的原因是不正确的超时设置。可以使用RequestConfig类设置所需的超时值。但是,如果所有线程同时在#execute方法中被阻塞,那么连接泄漏(连接池耗尽)的可能性就会更大。确保始终关闭CloseableHttpResponse实例,即使不关心响应或其内容。您可以通过打开电线/上下文日志来了解有关请求执行的更多细节,如测井指南中所述。

票数 1
EN

Stack Overflow用户

发布于 2013-10-12 15:58:01

我在代码中使用了HttpConnectionParams中的以下超时设置(HttpParams给了HttpClient构造函数):

代码语言:javascript
复制
org.apache.http.params.HttpConnectionParams.setConnectionTimeout(HttpParams, int)
org.apache.http.params.HttpConnectionParams.setSoTimeout(HttpParams, int)

当我用多个线程连接到同一主机时,我发现了一个问题,即当maxPerRoute设置低于线程数时会发生阻塞/超时。看看PoolingClientConnectionManager

代码语言:javascript
复制
org.apache.http.impl.conn.PoolingClientConnectionManager.setDefaultMaxPerRoute(int)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19335656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档