private void subRequest(HttpPost httpost) {
String reValue = "";
while (reValue.length() == 0) {
reValue = RunUtil.subPost(this.httpClient, httpost);
if (reValue.indexOf(Config.SUCCESSINFO) > 0)
Config.ZCS = Config.ZCS + 1;
else
reValue = "";
}
}
// post
public static String subPost(HttpClient httpClient, HttpPost httpost) {
String reValue = "";
try {
HttpResponse response = httpClient.execute(httpost);
reValue = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
httpost.abort();
}
return reValue;
}
程序总是报下面异常
异常1:
INFO | jvm 2 | 2013/04/06 08:00:37 | 2013-4-6 8:00:37 org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO | jvm 2 | 2013/04/06 08:00:37 | 信息: I/O exception (java.net.BindException) caught when connecting to the target host: Address already in use: connect
INFO | jvm 2 | 2013/04/06 08:00:37 | 2013-4-6 8:00:37 org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO | jvm 2 | 2013/04/06 08:00:37 | 信息: Retrying connect
INFO | jvm 2 | 2013/04/06 08:00:37 | 2013-4-6 8:00:37 org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO | jvm 2 | 2013/04/06 08:00:37 | 信息: I/O exception (java.net.BindException) caught when connecting to the target host: Address already in use: connect
INFO | jvm 2 | 2013/04/06 08:00:37 | 2013-4-6 8:00:37 org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO | jvm 2 | 2013/04/06 08:00:37 | 信息: Retrying connect
异常2:
Request already aborted
Request already aborted
Request already aborted
Request already aborted
Request already aborted
我想问的问题是
1、如果httpClient.execute(httpost)请求的服务器访还没打开,那会不会执行 httpost.abort();,如果执行了httpost.abort(); 我第二次请求还有效吗?会不会httpost就关掉了。
2、上面的异常是怎么回事啊?有人遇到过这种问题吗?
解决方案 »
- 好心人求解
- java操作word模版问题???
- 存入mysql的特殊字符变?号,如何提前判断?
- 一个关于string转换的问题,大家帮帮忙
- 安装Jctreator后调试的第一个程序,请帮忙
- 我的ftp代码一上传就报告NullPointer错误,到底是什么原因?50分
- 读xml的方法,谁能帮看看。
- 文件过滤???
- Eclipse 动态设置 toolsbar
- 奇怪,我用smartupload 上传文件,表单用 multipart/form-data 方式,通过 mysmartupload.getRequest().getParameter("txt_name")得到for
- 下面代码怎么写成伪代码啊
- httpclient问题请教啊~~~~~~~~~~~~~~~~~比较复杂~请大虾帮忙看你看啊~~2个多月了都没有解决啊~~~~
要么,你每次请求应答完毕后,不要关闭连接;要么,你就每次请求应答都关闭连接,下一次重新建立连接,然后再关闭。不要每次请求都建立连接,用完了还不关闭连接。
http://bbs.csdn.net/topics/390421156
也是关于hibernate的 头都晕了
if (reValue.indexOf(Config.SUCCESSINFO) > 0)
Config.ZCS = Config.ZCS + 1;
像这样的代码,在并发中,肯定出问题,做好线程安全。
如果你单线程时如果是正确的,应该是多线程中资源出现竞争混乱了。
==========================
我只是看到你的代码举例,不一定是这里的问题,在线程并发的时候,
你不知道哪个线程在什么时候执行,特别是你还是全局静态变量,
这是非常危险的做法,如果N个线程并发执行这句,那结果值还正确吗?
Config.ZCS = Config.ZCS + 1;
如:Config.ZCS = 1
A 1 + 1
B 1 + 1
C 1 + 1
D 2 + 1
ABCD四个线程,在Config.ZCS值未修改的时候,已经读出数据,A保存为2,D最后保存为3所有值为3。
再检查你的代码是否还有类似的代码。
private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(20, 25,25,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(20),
new ThreadPoolExecutor.CallerRunsPolicy());
for (int i=0;i<21;i++) {
threadPool.execute(new ThreadPoolTask(HttpClientList.get(i), HttpPostList.get(i)));
}[13 19:30:51.909]#Thread.Id:[28]#..........##Url耗时:470 .毫秒
[13 19:30:55.569]#Thread.Id:[30]#..........##Url耗时:4080 .毫秒
[13 19:30:55.569]#Thread.Id:[41]#..........##Url耗时:4070 .毫秒
[13 19:30:55.569]#Thread.Id:[27]#..........##Url耗时:4140 .毫秒
[13 19:30:55.679]#Thread.Id:[39]#..........##Url耗时:4180 .毫秒
[13 19:30:55.899]#Thread.Id:[37]#..........##Url耗时:4400 .毫秒
[13 19:30:59.129]#Thread.Id:[36]#..........##Url耗时:7610 .毫秒
[13 19:30:59.139]#Thread.Id:[50]#..........##Url耗时:7640 .毫秒
[13 19:30:59.139]#Thread.Id:[38]#..........##Url耗时:7640 .毫秒
[13 19:30:59.359]#Thread.Id:[43]#..........##Url耗时:7860 .毫秒
[13 19:31:02.709]#Thread.Id:[47]#..........##Url耗时:11210 .毫秒
[13 19:31:02.709]#Thread.Id:[46]#..........##Url耗时:11210 .毫秒
[13 19:31:02.719]#Thread.Id:[42]#..........##Url耗时:11220 .毫秒
[13 19:31:02.909]#Thread.Id:[53]#..........##Url耗时:11410 .毫秒
[13 19:31:06.229]#Thread.Id:[49]#..........##Url耗时:14730 .毫秒
[13 19:31:06.239]#Thread.Id:[55]#..........##Url耗时:14740 .毫秒
[13 19:31:06.289]#Thread.Id:[35]#..........##Url耗时:14790 .毫秒
[13 19:31:06.439]#Thread.Id:[45]#..........##Url耗时:14940 .毫秒
[13 19:31:09.769]#Thread.Id:[56]#..........##Url耗时:18240 .毫秒
[13 19:31:09.769]#Thread.Id:[51]#..........##Url耗时:18270 .毫秒我发现执行效果大概是每4个一组,启动时间依此增加,每次差不多有5秒的间隔这个间隔太长了,我不知道是我哪里写错了。还是httpclient 和 HttpPost 有什么特性呢?
我生成了x个HttpClient,和x个HttpPost 然后用线程池执行
private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(20, 25,25,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(20),
new ThreadPoolExecutor.CallerRunsPolicy());
for (int i=0;i<21;i++) {
threadPool.execute(new ThreadPoolTask(HttpClientList.get(i), HttpPostList.get(i)));
}[13 19:30:51.909]#Thread.Id:[28]#..........##Url耗时:470 .毫秒
[13 19:30:55.569]#Thread.Id:[30]#..........##Url耗时:4080 .毫秒
[13 19:30:55.569]#Thread.Id:[41]#..........##Url耗时:4070 .毫秒
[13 19:30:55.569]#Thread.Id:[27]#..........##Url耗时:4140 .毫秒
[13 19:30:55.679]#Thread.Id:[39]#..........##Url耗时:4180 .毫秒
[13 19:30:55.899]#Thread.Id:[37]#..........##Url耗时:4400 .毫秒
[13 19:30:59.129]#Thread.Id:[36]#..........##Url耗时:7610 .毫秒
[13 19:30:59.139]#Thread.Id:[50]#..........##Url耗时:7640 .毫秒
[13 19:30:59.139]#Thread.Id:[38]#..........##Url耗时:7640 .毫秒
[13 19:30:59.359]#Thread.Id:[43]#..........##Url耗时:7860 .毫秒
[13 19:31:02.709]#Thread.Id:[47]#..........##Url耗时:11210 .毫秒
[13 19:31:02.709]#Thread.Id:[46]#..........##Url耗时:11210 .毫秒
[13 19:31:02.719]#Thread.Id:[42]#..........##Url耗时:11220 .毫秒
[13 19:31:02.909]#Thread.Id:[53]#..........##Url耗时:11410 .毫秒
[13 19:31:06.229]#Thread.Id:[49]#..........##Url耗时:14730 .毫秒
[13 19:31:06.239]#Thread.Id:[55]#..........##Url耗时:14740 .毫秒
[13 19:31:06.289]#Thread.Id:[35]#..........##Url耗时:14790 .毫秒
[13 19:31:06.439]#Thread.Id:[45]#..........##Url耗时:14940 .毫秒
[13 19:31:09.769]#Thread.Id:[56]#..........##Url耗时:18240 .毫秒
[13 19:31:09.769]#Thread.Id:[51]#..........##Url耗时:18270 .毫秒我发现执行效果大概是每4个一组,启动时间依此增加,每次差不多有5秒的间隔这个间隔太长了,我不知道是我哪里写错了。还是httpclient 和 HttpPost 有什么特性呢?