httpClient多线程问题
2016-03-11 14:28
495 查看
问题: 今天线上出现一个httpclient的问题:
java.lang.IllegalStateException: Connection is not open
at org.apache.commons.httpclient.HttpConnection.assertOpen(HttpConnection.java:1
276)
at org.apache.commons.httpclient.HttpConnection.getResponseInputStream(H
ttpConnection.java:857)
at org.apache.commons.httpclient.HttpMethodBase.readResponseHeaders(Http
MethodBase.java:1790)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB
ase.java:1592)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
ava:995)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
pMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
thodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:324)
at com.kingpoint.BiDownTestCookie.getByPostMethod(BiDownTestCookie.java:
172)
at com.kingpoint.ClickIE.run(ClickIE.java:27)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462) 场景:我通过多线程调用外部http服务,但是我的httpClient是一个单例,当某个请求返回以后,还有的请求用的是同样的单例,而上一个请求的连接我已经关闭了,所以导致connection is not open。
解决方案:
1. 请求加锁
2. 每次new HttpClient(); 保证独立。
参考:http://www.iteye.com/problems/63688
java.lang.IllegalStateException: Connection is not open
at org.apache.commons.httpclient.HttpConnection.assertOpen(HttpConnection.java:1
276)
at org.apache.commons.httpclient.HttpConnection.getResponseInputStream(H
ttpConnection.java:857)
at org.apache.commons.httpclient.HttpMethodBase.readResponseHeaders(Http
MethodBase.java:1790)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB
ase.java:1592)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
ava:995)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
pMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
thodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
a:324)
at com.kingpoint.BiDownTestCookie.getByPostMethod(BiDownTestCookie.java:
172)
at com.kingpoint.ClickIE.run(ClickIE.java:27)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462) 场景:我通过多线程调用外部http服务,但是我的httpClient是一个单例,当某个请求返回以后,还有的请求用的是同样的单例,而上一个请求的连接我已经关闭了,所以导致connection is not open。
解决方案:
1. 请求加锁
2. 每次new HttpClient(); 保证独立。
参考:http://www.iteye.com/problems/63688
相关文章推荐
- Http Get和Post区别
- Android笔记--Android Studio 引用第三方开源类okhttp、gson库时的打包混淆
- Ubuntu下HTTPS配置
- 内存泄漏检测http://www.cnblogs.com/yixiaoyang/archive/2010/12/10/1902255.html
- Valgrind确实是强大的工具http://www.cnblogs.com/nicebear/archive/2012/05/05/2485054.html
- python 网络编程第一章
- HTTP和HTTPS的区别(转)
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历 http://www.cnblogs.com/lanxuezaipiao/p/3604533.html
- HTTP协议基础
- HTTPS证书安装 - SSL certificate from Godaddy 安装到Ubuntu上的Apache (精简步骤)
- Android 网络通信框架Volley简介(Google IO 2013)
- HttpWatch和jmeter的一次性能测试
- iOS网络开发工具集----字符串操作和时间操作
- HttpClient使用详解
- YTKNetwork 使用高级教程
- YTKNetwork 使用基础教程
- HTTP,FTP,TCP,UDP及SOCKET
- iOS开发网络篇—数据缓存
- 使用matlab版卷及神经网络 MatconvNe和预训练的imageNet进行图像检Image retrieval using MatconvNet and pre-trained imageNet
- 从 NSURLConnection 到 NSURLSession