MultiThreadedHttpConnectionManager
2016-03-02 15:55
756 查看
HttpClient Theading
简介
这篇文章概括了怎样在多线程环境下安全的使用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 ( )来释放连接。
简介
这篇文章概括了怎样在多线程环境下安全的使用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 ( )来释放连接。
相关文章推荐
- HttpURLConnection对象
- linux下的tcp的server和client编程
- Android框架之网络通信Volley
- window遍历文件夹下的文件 http://bbs.csdn.net/topics/390368005/
- TCP/IP参考模型
- 关于4A网络安全管控平台控件加载失败的解决方法
- iOS下的实际网络连接状态检测
- Win7 网络唤醒(当有TCP连接时自动恢复)
- [转发]HttpWebRequest模拟登陆,存储Cookie以便登录请求后使用
- 20个你可能不知道的 Linux 网络工具
- iOS网络开发(6)网络图片加载开源框架SDWebImage
- HttpClient 4使用方法的几个例子
- httpclient 3上传文件例子
- HttpClient4登陆有验证码的网站
- HttpClient4登陆有验证码的网站
- Eclipse和Tomcat联合进行网络编程的环境搭建
- iOS网络开发(5)请求的缓存
- 网络互联参考模型
- iOS学习----------AFNetworking(1)网络监控
- HTTP Content-type 对照表