文档章节

MultiThreadedHttpConnectionManager

学海无涯_
 学海无涯_
发布于 2017/08/28 16:11
字数 534
阅读 87
收藏 1

这篇文章概括了怎样在多线程环境下安全的使用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 ( )来释放连接。

本文转载自:http://blog.csdn.net/fairytall/article/details/7938692

上一篇: mongo kill慢查询
下一篇: sqlyog快捷键
学海无涯_
粉丝 15
博文 111
码字总数 53170
作品 0
邯郸
私信 提问
HTTP Client MultiThreadedHttpConnectionManager线程安全连接管理类源码解析

MultiThreadedHttpConnectionManager 是HTTP Client中用来复用连接的连接管理类,可以通过 MultiThreadedHttpConnectionManager n = new MultiThreadedHttpConnectionManager(); HttpClient ......

liuinsect
2013/06/17
2K
3
HttpClient多线程并发问题

这篇文章概括了怎样在多线程环境下安全的使用HttpClient。 建立连接 在HttpClient中使用多线程的一个主要原因是可以一次执行多个方法。在执行期间,每一个方法都使用一个HttpConnection实例。...

Nori
2016/03/31
270
1
(HttpClient超时机制)timeout调度算法探讨

mark一下: HttpClient超时机制(安全问题处理:访问超大文件控制) 不过httpclient4开始好象没有MultiThreadedHttpConnectionManager这个类了,代替的应该是:PoolingHttpClientConnectionMana...

z_jordon
2015/05/09
170
0
Connection is not open httpClient 的问题解决方案

在使用httpClient客户端工具时,需要设置标红颜色的属性,否则就会出现Connection is not open 这个异常,以及这个异常会引发其他的一些异常。 httpClient默认连接数为2,导致并发用户超过2...

李超
2016/06/23
171
0
Spring HttpInvoke实现和效率提升

Spring HttpInvoke,一种较为常用的、基于Spring架构的服务器之间的远程调用实现,可以说是轻量级的RMI。 最初,我们使用Spring HttpInvoke同步配置数据,刷新多个服务器上的缓存,当然如果用...

疯狂的艺术家
2011/03/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
11
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
7
0
【Medium 万赞好文】ViewModel 和 LIveData:模式 + 反模式

原文作者: Jose Alcérreca 原文地址: ViewModels and LiveData: Patterns + AntiPatterns 译者:秉心说 View 和 ViewModel 分配责任 理想情况下,ViewModel 应该对 Android 世界一无所知。...

秉心说
昨天
14
0
重学计算机组成原理(十二) - 异常和中断

1 概览 完好的程序都满足以下特征 自动运行 我们的程序和指令都是一条条顺序执行,不需要通过键盘或者网络给这个程序任何输入 正常运行 没有遇到计算溢出之类的程序错误。 不过,现实的软件世...

JavaEdge
昨天
10
0
程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部