httpClient + 线程池 + 多线程 的底层问题。。。。。。。。。。。。。。。。。不知道是否有人知道啊?3个月都没有解决啊。。。。。。。哎,有源码

Kyle-soft 2013-04-13 08:31:50
我生成了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个一组,启动时间依此增加,每组差不多有3-4秒的间隔,这个间隔太长了啊,我认为线程池并行执行,效果应该每个线程启动相差时间在100毫秒左右,而且我的例子为什么是每4个一组呢?我池子大小也没有描述4个一组啊。我不知道是我哪里写错了。还是httpclient 和 HttpPost 有什么特性呢?求大侠们指点啊。

...全文
316 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
七神之光 2013-04-15
  • 打赏
  • 举报
回复
应该是网络io的问题
Kyle-soft 2013-04-15
  • 打赏
  • 举报
回复
555555555555555
跳蚤图 2013-04-15
  • 打赏
  • 举报
回复
STEEL-CHINA 2013-04-15
  • 打赏
  • 举报
回复
一次性把所有代码打包出来,让大家帮你调一下,这问题应该不会这么费劲的。
chinani 2013-04-15
  • 打赏
  • 举报
回复
一点浅见,是不是httpClient使用有误? 对于PostMethod方法而言,是不是没有将全部应答读取(无论它对程序是否有用),或没有释放链接资源;
Kyle-soft 2013-04-13
  • 打赏
  • 举报
回复
我又换了个网站提交了一下效果会好点,而且我很奇怪的是,我调用一个方法为什么越到后面该方法耗时越长。 按照逻辑说每个方法耗时应该是随机的啊。只有第六次为一一次后面执行的时间比前面的短。 //第1次 [13 21:57:30.176]#Thread.Id:[47]#.......DCRequestEnd##Url耗时:594 .毫秒 [13 21:57:30.386]#Thread.Id:[40]#.......DCRequestEnd##Url耗时:804 .毫秒 [13 21:57:30.686]#Thread.Id:[43]#.......DCRequestEnd##Url耗时:1104 .毫秒 [13 21:57:30.897]#Thread.Id:[44]#.......DCRequestEnd##Url耗时:1315 .毫秒 [13 21:57:31.467]#Thread.Id:[45]#.......DCRequestEnd##Url耗时:1885 .毫秒 [13 21:57:34.147]#Thread.Id:[42]#.......DCRequestEnd##Url耗时:4565 .毫秒 [13 21:57:34.568]#Thread.Id:[41]#.......DCRequestEnd##Url耗时:4986 .毫秒 [13 21:57:34.968]#Thread.Id:[46]#.......DCRequestEnd##Url耗时:5386 .毫秒 //第2次 //这个反应是最好的了 基本上并行了 [13 22:00:37.295]#Thread.Id:[24]#.......DCRequestEnd##Url耗时:490 .毫秒 [13 22:00:37.415]#Thread.Id:[25]#.......DCRequestEnd##Url耗时:610 .毫秒 [13 22:00:37.505]#Thread.Id:[28]#.......DCRequestEnd##Url耗时:700 .毫秒 [13 22:00:37.625]#Thread.Id:[23]#.......DCRequestEnd##Url耗时:820 .毫秒 [13 22:00:37.685]#Thread.Id:[29]#.......DCRequestEnd##Url耗时:870 .毫秒 [13 22:00:37.785]#Thread.Id:[27]#.......DCRequestEnd##Url耗时:980 .毫秒 [13 22:00:37.956]#Thread.Id:[26]#.......DCRequestEnd##Url耗时:1151 .毫秒 [13 22:00:38.156]#Thread.Id:[30]#.......DCRequestEnd##Url耗时:1341 .毫秒 //第3次 //这个反应是最好的了 基本上并行了 [13 22:01:20.507]#Thread.Id:[38]#.......DCRequestEnd##Url耗时:571 .毫秒 [13 22:01:20.617]#Thread.Id:[35]#.......DCRequestEnd##Url耗时:681 .毫秒 [13 22:01:20.657]#Thread.Id:[34]#.......DCRequestEnd##Url耗时:721 .毫秒 [13 22:01:20.897]#Thread.Id:[32]#.......DCRequestEnd##Url耗时:1051 .毫秒 [13 22:01:21.047]#Thread.Id:[39]#.......DCRequestEnd##Url耗时:1111 .毫秒 [13 22:01:21.148]#Thread.Id:[33]#.......DCRequestEnd##Url耗时:1202 .毫秒 [13 22:01:21.378]#Thread.Id:[36]#.......DCRequestEnd##Url耗时:1432 .毫秒 [13 22:01:24.168]#Thread.Id:[37]#.......DCRequestEnd##Url耗时:4232 .毫秒 //第4次 [13 22:02:27.745]#Thread.Id:[41]#.......DCRequestEnd##Url耗时:461 .毫秒 [13 22:02:28.495]#Thread.Id:[43]#.......DCRequestEnd##Url耗时:1201 .毫秒 [13 22:02:28.600]#Thread.Id:[42]#.......DCRequestEnd##Url耗时:1306 .毫秒 [13 22:02:29.440]#Thread.Id:[45]#.......DCRequestEnd##Url耗时:2125 .毫秒 [13 22:02:29.510]#Thread.Id:[44]#.......DCRequestEnd##Url耗时:2195 .毫秒 [13 22:02:31.196]#Thread.Id:[46]#.......DCRequestEnd##Url耗时:3902 .毫秒 [13 22:02:31.295]#Thread.Id:[48]#.......DCRequestEnd##Url耗时:3990 .毫秒 [13 22:02:34.235]#Thread.Id:[47]#.......DCRequestEnd##Url耗时:6941 .毫秒 //第5次 [13 22:03:54.274]#Thread.Id:[54]#.......DCRequestEnd##Url耗时:630 .毫秒 [13 22:03:54.364]#Thread.Id:[51]#.......DCRequestEnd##Url耗时:670 .毫秒 [13 22:03:54.684]#Thread.Id:[50]#.......DCRequestEnd##Url耗时:1040 .毫秒 [13 22:03:54.684]#Thread.Id:[52]#.......DCRequestEnd##Url耗时:1000 .毫秒 [13 22:03:54.694]#Thread.Id:[55]#.......DCRequestEnd##Url耗时:1010 .毫秒 [13 22:03:54.775]#Thread.Id:[53]#.......DCRequestEnd##Url耗时:1131 .毫秒 [13 22:03:54.945]#Thread.Id:[56]#.......DCRequestEnd##Url耗时:1261 .毫秒 [13 22:03:57.005]#Thread.Id:[57]#.......DCRequestEnd##Url耗时:3361 .毫秒 //第6次 [13 22:05:38.055]#Thread.Id:[63]#.......DCRequestEnd##Url耗时:660 .毫秒 [13 22:05:38.415]#Thread.Id:[62]#.......DCRequestEnd##Url耗时:1020 .毫秒 [13 22:05:38.415]#Thread.Id:[66]#.......DCRequestEnd##Url耗时:1020 .毫秒 [13 22:05:38.415]#Thread.Id:[59]#.......DCRequestEnd##Url耗时:1020 .毫秒 [13 22:05:38.456]#Thread.Id:[64]#.......DCRequestEnd##Url耗时:981 .毫秒//只有这一次该方法耗时比前面的短 [13 22:05:38.626]#Thread.Id:[60]#.......DCRequestEnd##Url耗时:1151 .毫秒 [13 22:05:41.186]#Thread.Id:[65]#.......DCRequestEnd##Url耗时:3711 .毫秒 [13 22:05:41.975]#Thread.Id:[61]#.......DCRequestEnd##Url耗时:4500 .毫秒 //第7次 //都在11秒内执行 [13 22:08:11.078]#Thread.Id:[22]#.......DCRequestEnd##Url耗时:831 .毫秒 [13 22:08:11.188]#Thread.Id:[24]#.......DCRequestEnd##Url耗时:931 .毫秒 [13 22:08:11.198]#Thread.Id:[23]#.......DCRequestEnd##Url耗时:951 .毫秒 [13 22:08:11.208]#Thread.Id:[25]#.......DCRequestEnd##Url耗时:951 .毫秒 [13 22:08:11.238]#Thread.Id:[29]#.......DCRequestEnd##Url耗时:981 .毫秒 [13 22:08:11.318]#Thread.Id:[28]#.......DCRequestEnd##Url耗时:1061 .毫秒 [13 22:08:11.449]#Thread.Id:[27]#.......DCRequestEnd##Url耗时:1192 .毫秒 [13 22:08:11.479]#Thread.Id:[26]#.......DCRequestEnd##Url耗时:1222 .毫秒 [13 22:08:11.729]#Thread.Id:[30]#.......DCRequestEnd##Url耗时:1472 .毫秒
Kyle-soft 2013-04-13
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。怎么解决啊?
STEEL-CHINA 2013-04-13
  • 打赏
  • 举报
回复
这问题应该不那么难解决,
STEEL-CHINA 2013-04-13
  • 打赏
  • 举报
回复
private ThreadPoolExecutor threadPool 如果不能线程池,执行要多久?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧