httpclient连接释放

 httpClient必须releaseConnection,但不是abort。因为releaseconnection是归还连接到到连接池,而abort是直接抛弃这个连接,
而且占用连接池的数目。
HttpGet httpget = new HttpGet(url);
httpGet.releaseConnection();

连接回收策略

   经典的IO阻塞模式有一个主要的缺点,就是当IO操作被阻塞的时候,网络socket只对I/O事件影响。
当一个连接释放回管理器,它会保持活跃,然后它不会监听socket的状态和任何IO事件。如果这个连接在服务器端被关闭,客户端的连接在连接状态下不会检测出这个改变。
HttpClient通过测试连接是否为"陈腐的"而尝试去缓解这个问题,"陈腐的"是指不再是有效的,因为它会被服务器端关闭掉。并会在这之前为了正执行中的HTTP请求去使用连接。
"陈腐的"连接检测不是百分之百有效的,并且会给每个请求执行增加10毫秒,为了空闲连接,唯一有效的解决方法是在每个socket模型里不包含一个线程,有一个专门的监听线程是被用来驱逐已经过期不活跃的长连接的。这个监听线程会周期中的调用ClientConnectionManager #closeExpiredConnections()方法去关闭所有已经过期的连接并从连接池里驱逐已经关闭的连接。在超过指定的过期后,也可以随意地调用ClientConnectionManager#closeIdleConnections()方法来关闭所有连接。
public static class IdelConnectionMonitorThread extends Thread{
 private final HttpClientConnectionManager connMgr;
 private volatile boolean shutdown;
 
 public IdleConnectionMonitorThread(HttpClientManager connMgr){
   super();
   this.connMgr = connMgr;
}

 public void run(){
   try{
      while(!shutdown){
         synchronized(this){
            wait(5000);
            //Close expired connections
            connMgr.closeExpiredConnections();
            //Optionally close connections that have bean idle longer than 30 sec
            connMgr.closeIdelConnections(30,TimeUnit.SECONDS);
        }
      }
  }catche(Exception e){
      //terminate
  }
}

 public void shutdown(){
    shutdown=true;
    synchronized(this){
     notifyAll();
    }
}
}

最新文章

  1. [LeetCode] Wiggle Sort 摆动排序
  2. Apriori——python3实现
  3. ural 1018(树形dp)
  4. 【转】IOS开发:[1]Xcode5界面入门
  5. C#调用大漠插件的方法和实例
  6. A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)
  7. python2与python3
  8. nginx做反向负载均衡,后端服务器获取真实客户端ip
  9. Spring4 AOP详解
  10. 开始你的第一个npm脚本工具
  11. VS2017移动开发(C#、VB.NET)——Numeric控件的使用方式
  12. 发福利了!!超过100本的linux免费书籍
  13. jQuery AJAX获取JSON数据解析多种方式示例
  14. Appium+Java(三)搭建环境之踩过的坑
  15. 整理一下odoo10在windows系统下部署的流程
  16. 深度学习的batch_size
  17. openlayers/// Puppeteer.js
  18. ajax实现模糊查询完成列表信息显示
  19. 【转】HBase架构解析
  20. Xcode 提交APP时遇到 “has one iOS Distribution certificate but its private key is not installed”

热门文章

  1. java web项目启动进入首页的配置方式(包含过滤跳转首页实现)
  2. java编程内容之开始
  3. Oncomine: 一个肿瘤相关基因研究的数据库--转载
  4. Codeforces Round #289 (Div. 2, ACM ICPC Rules) E. Pretty Song 算贡献+前缀和
  5. Cocos2d-x学习笔记(六)Label字体控制
  6. 安装cartographer_ros
  7. Kali Linux下常用软件安装及配置
  8. C#,ArcGIS Engine开发入门教程
  9. English trip -- VC(情景课)10 B Around the house 在家里
  10. LeetCode--035--搜索插入位置