我生成了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 有什么特性呢?求大侠们指点啊。