2019独角兽企业重金招聘Python工程师标准>>>

这篇文章概括了怎样在多线程环境下安全的使用HttpClient。

MultiThreadedHttpConnectionManager

在HttpClient中使用多线程的一个主要原因是可以一次执行多个方法。在执行期间,每一个方法都使用一个HttpConnection实例。由于在同一时间多个连接只能安全地用于单一线程和方法和有限的资源,我们就必须确保连接分配给正确的方法。而MultiThreadedHttpConnectionManager完全可以代替我们完成这一项工作,这样我们就不必去考虑多线程带来安全的问题。

MultiThreadedHttpConnectionManager connectionManager =

new MultiThreadedHttpConnectionManager();

HttpClient client = new HttpClient(connectionManager);

以上代码中的HttpClient就在多线程中执行多个方法了。当我们再次调用httpClient.executeMethod()方法时,就会去Connection Manager中去请求HttpConneciton的实例,这样就避免了线程安全问题,因为HttpClient已经帮我们做了。

Options

MultThreadedHttpConnectionManager参数配置:

connectionStaleCheckingEnabled:这个标志对所有已经创建的connections都适用。除特殊情况外,此值应该设置成true。

maxConnectionsPerHost:最大连接数,默认是2。

maxTotalConnections:最大活动连接数,默认是20。

释放连接

connection management比较重要的是当连接不再使用时,一定要手动释放。这样做的原因是HttpClient不能够确定哪个方法不被使用,哪个方法还在使用。这是因为Response body不是由HttpClient来自动读取其数据的,而是由使用HttpClient的应用程序来完成的。当读取Response的数据是时,必须使用此方法的连接。这样,在Response的数据在读取前,HttpClient是没有释放连接的。所有这就要求在读取完Response的数据后,应用程序及时的使用releaseConnection()方法来释放连接。

MultiThreadedHttpConnectionManager connectionManager =

new MultiThreadedHttpConnectionManager();

HttpClient client = new HttpClient(connectionManager);

...

// and then from inside some thread executing a method

GetMethod get = new GetMethod("http://httpcomponents.apache.org/");

try {

client.executeMethod(get);

// print response to stdout

System.out.println(get.getResponseBodyAsStream());

} finally {

// be sure the connection is released back to the connection

// manager

get.releaseConnection();

}

特别注意,无论执行的方法或是否也不例外被抛出。对于每一个HttpClient.executeMethod方法必须有一个method.releaseConnection ( )来释放连接。

转载于:https://my.oschina.net/u/1178126/blog/1525037

MultiThreadedHttpConnectionManager相关推荐

  1. 那些年我们踩到过的坑(二):3.1 版 MultiThreadedHttpConnectionManager 未releaseConnection导致应用服务器宕机...

    昨天短信服务又宕机了,jstack打出线程信息发现 所有线程池的线程都在wait,栈信息如下: at java.lang.Object.wait(Native Method) - waiting on ...

  2. HttpClient连接池设置引发的一次雪崩

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://i7q.cn/50G6cx - 1 - 事件背 ...

  3. 恕我直言,HttpClient 你不一定会用

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://985.so/aVKE 事件背景 我在凤巢团队 ...

  4. HttpClient 连接池设置引发的一次雪崩!

    - 1 - 事件背景 我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务.最近经常出现Address already in use (Bind fai ...

  5. 基于HttpClient的HttpUtils(后台访问URL)

    最近做在线支付时遇到需要以后台方式访问URL并获取其返回的数据的问题,在网络上g了一把,发现在常用的还是Apache的HttpClient.因为以经常要用到的原故,因此我对其进行了一些简单的封装,在此 ...

  6. Jakarta Commons:巧用类和组件1

    From http://linux.ccidnet.com/art/322/20030805/57869_1.html Jakarta Commons是Jakarta的子项目,它创建和维护着许多独立软 ...

  7. HttpClient 设置不当引发的一次雪崩!

    作者 | zxcodestudy 来源 | https://blog.csdn.net/qq_16681169/article/details/94592472 一. 事件背景 我最近运维了一个网上的 ...

  8. HttpClient 连接池设置不当引发的一次雪崩

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | zxcodestudy 来源 | http:/ ...

  9. Android网络优化之HttpClient

    参考:http://blog.csdn.net/heng615975867/article/details/9012303     尽管Android官网推荐在2.3及后续版本中使用HttpURLCo ...

最新文章

  1. oracle archivelog模式与非archivelog模式转换
  2. [深度学习] 自然语言处理 --- ALBERT 介绍
  3. linux云服务器状态上报解决方案:外发个人邮箱
  4. CentOS 7添加开机启动服务脚本
  5. 经营管理类游戏_如何保持精英管理
  6. 超级备份还原v2.3.05_新手如何一键还原电脑系统(图文教程)
  7. Azure上部署FTP服务
  8. 实习 | 京东金融个人风险管理中心(地点:北京)
  9. 系列文章--SharePoint 2013 开发教程
  10. 《西游降魔篇》[BD-RMVB.720p.国语中字][2013年奇幻冒险喜剧]
  11. 知网哭穷赔不起1200亿,网友:收钱时咋不嫌多
  12. 模型评估——混淆矩阵confusion_matrix
  13. 键盘删除键长按只能删除一个字符,因为开启了键盘筛选键功能,解决方法
  14. 解决警告Presenting view controllers on detached view controllers is discouraged 以及引申
  15. PHP中Linux知识,超全面的Linux基础知识整理
  16. Android Studio-开发少年强国App(一)
  17. 学生宿舍管理数据库设计(上)
  18. C++ 多态(动态多态)
  19. 从LiveJournal后台发展看大规模网站性能优化方法[zz]
  20. Apache URL重定向指南

热门文章

  1. javascript——事件默认行为
  2. php-curl小记
  3. [新手学Go]GO语言闭包的使用
  4. asp.net mvc fckeditor全攻略(补充:Controller中传值的问题)
  5. Glide源码(基于4.8版本)解析
  6. 提高开发效率之VS Code基础配置篇
  7. Linux全攻略--MySQL数据库配置与管理
  8. python第三方模块—psutil模块
  9. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
  10. 一步一步写算法(之prim算法 中)