《HttpClient官方文档》2.4 多线程请求执行
2.4.多线程请求执行
当HttpClient拥有类似PoolingClientConnectionManage类这样的池连接管理器,它就能够使用多线程来并发执行多个请求。
PoolingClientConnectionManager类将根据其配置分配连接。如果给定路由的所有连接都已租用,则会阻塞对连接的请求,直到有连接释放回到连接池。可以通过将“http.conn-manager.timeout”设置为正值来确保连接管理器在连接请求操作中不会无限期地阻塞。如果连接请求不能在给定的期限内提供服务,会抛出ConnectionPoolTimeoutException异常。
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.build();
// URIs to perform GETs on
String[] urisToGet = {
"https://www.domain1.com/",
"https://www.domain2.com/",
"https://www.domain3.com/",
"https://www.domain4.com/"
};
// create a thread for each URI
GetThread[] threads = new GetThread[urisToGet.length];
for (int i = 0; i < threads.length; i++) {
HttpGet httpget = new HttpGet(urisToGet[i]);
threads[i] = new GetThread(httpClient, httpget);
}
// start the threads
for (int j = 0; j < threads.length; j++) {
threads[j].start();
}
// join the threads
for (int j = 0; j < threads.length; j++) {
threads[j].join();
}
HttpClient接口的实例是线程安全的,可以在多个执行线程之间共享,强烈建议每个线程维护自己的专用HttpContext接口实例。
static class GetThread extends Thread {
private final CloseableHttpClient httpClient;
private final HttpContext context;
private final HttpGet httpget;
public GetThread(CloseableHttpClient httpClient, HttpGet httpget) {
this.httpClient = httpClient;
this.context = HttpClientContext.create();
this.httpget = httpget;
}
@Override
public void run() {
try {
CloseableHttpResponse response = httpClient.execute(
httpget, context);
try {
HttpEntity entity = response.getEntity();
} finally {
response.close();
}
} catch (ClientProtocolException ex) {
// Handle protocol errors
} catch (IOException ex) {
// Handle I/O errors
}
}
}
最后更新:2017-05-19 13:32:09
上一篇:
《HttpClient官方文档》4.1-4.3 HTTP验证
下一篇:
D-News | 中国发布首个VR标准,谷歌为数据中心研发SDN新架构Espresso
简析Go与其他语言不同的类型
Error 1115 Unknow character set ‘gbk’
7月18日云栖精选夜读:Bridge to the digital world —— AR算法技术分享
js中window.showModalDialog各浏览器居中和传参实例兼以及一些兼容性问题
PLM调研第三天
Consul+Prometheus系统监控之注册发现
《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.5 可视化
ubuntu下编写开机自启守护进程,并记录进程信息到日志文件
Java类加载器学习2——自定义类加载器和父类委托机制带来的问题
马云爸爸不惜花重金请你来嗨的音乐节,【窦靖童】领衔大咖阵容全曝光!