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 = {"http://www.domain1.com/","http://www.domain2.com/","http://www.domain3.com/","http://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;}@Overridepublic 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}}}

转载自 并发编程网 - ifeve.com

《HttpClient官方文档》2.4 多线程请求执行相关推荐

  1. 《HttpClient官方文档》2.1 连接持久性-2.2 HTTP连接路由

    2.1. 连接持久性 一个主机与另一个主机建立连接的过程是相当复杂的,并且涉及两个端点之间的多个分组交换,这可能相当耗时.尤其是对于较小的HTTP消息来说,连接握手的开销是很大的.如果打开的连接能够重 ...

  2. JMeter官方文档阅读及实践笔记(上)

    JMeter笔记 一.测试计划元件概览 本节简单介绍测试计划的不同部分. 最小测试将包括测试计划.线程组和一个或多个采样器. 1.Thread Group,线程组 线程组元素是任何测试计划的起点.所有 ...

  3. pythondocumentation_python官方文档

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方便大家可以更多地了解python查阅到相关函数或者功能的用法. 01搜索引擎首 ...

  4. Python 3.7.1 官方文档 总结

    Python 3.7.1 1.一些概念 2.小用法 2.1 迭代器: 2.2 生成器 3.数据结构 3.1 字符串 3.2 列表 3.2.1 列表方法 list.append(x) list.exte ...

  5. redisson使用全解——redisson官方文档+注释(上篇)

    文章目录 官方文档 Redisson项目介绍 一.概述 二.配置方法 2.1. 程序化配置方法 2.2. 文件方式配置 2.2.1 通过YAML格式配置 2.3. 常用设置 2.4. 集群模式 2.4 ...

  6. 深入理解Java 8 Lambda表达式(Oracle官方文档版)

    Java 8 问世三年了,9马上也要问世了,所以,嗯,我要开始学8了-- 官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdae ...

  7. 《Redis官方文档》用Redis构建分布式锁

    <Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...

  8. Swift 4官方文档中文版 The Basic(上)

    Swift学习交流群: 313838956 本群由Guards翻译组创建并维护, 志于给认真想学习Swift的同学打造一个良好的交流圈子. 该文章翻译自Apple官方文档: The Swift 4 P ...

  9. kafka官方文档学习笔记2--QuickStart

    下载kafka https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.0/kafka_2.11-1.0.0.tgz 解压安装包 > tar ...

最新文章

  1. 微信开发文档笔记整理(一)
  2. Hadoop文件压缩格式分析和比较
  3. jQuery 图片滚动效果
  4. echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图
  5. LeetCode 1172. 餐盘栈(栈 + set)
  6. netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
  7. time()函数php_time()
  8. 实验四+067+冯艳芳
  9. Hibernate 映射文件基本概述
  10. Kubernetes v1.14.0 之 kube_scheduler 部署
  11. 【图像处理基础】基于matlab图像SRGB+Adobe RGB伽马校正【含Matlab源码 255期】
  12. 【图像处理】基于matlab图像RGB三色合成+分离【含Matlab源码 401期】
  13. 安装kali的过程以及菜咩学到的基础知识
  14. 维多利亚计算机专业怎么样,维多利亚大学计算机科学专业 学生要学哪些内容...
  15. 脉歌蓝牙耳机线评测_感受蓝牙5.0带来的震撼——脉歌T1000Pro蓝牙耳机轻体验
  16. SPR EAD NET 6
  17. 学习方法和态度比什么都重要
  18. Win10自带的SSH服务 scp功能传输文件(linux)
  19. 关于RSA加密后,后台解密中文乱码的解决方法
  20. 【CodeForces】Codeforces Round 583

热门文章

  1. maven多模块eclipse jetty热部署
  2. 前台特效(2)回到顶部
  3. NoSQL介绍(三)
  4. Java的基本数据类型
  5. Android SDK 国内镜像及配置方法
  6. php-fpm 启动参数及重要配置详解
  7. [Selenium] 操作浏览器 Cookies
  8. [转]Knockoutjs快速入门
  9. 给PHPSTORM添加XDEBUG调试功能
  10. Java中对象的销毁