《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——自定义类加载器和父类委托机制带来的问题
马云爸爸不惜花重金请你来嗨的音乐节,【窦靖童】领衔大咖阵容全曝光!