为了账号安全,请及时绑定邮箱和手机立即绑定

java线程池问题, 欢迎解答

java线程池问题, 欢迎解答

九州编程 2018-07-16 18:30:00
有上图可以看出来 , 将线程池的数量设置为 1 和 3 , 完成的时间是差不多的 , 这么什么原因呢 ?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

处理的内容太少了 看不出消耗 多线程和单线程完全没什么区别 你里面放个循环 再试试


查看完整回答
反对 回复 2018-07-26
?
Helenr

TA贡献1780条经验 获得超4个赞

问题在于你使用的线程暂存队列SynchronousQueue。SynchronousQueue是一个无空间的队列。还有你线程池数量的限制。线程池有两个数量。核心线程量和总线程量。你说的1和3是核心线程量。10是总线程量。线程任务提交给线程池的流程是首先看是否有空闲的核心线程,如果有就交于核心线程处理。如果没有就到暂存队列中等待核心线程释放。如果暂存队列也被放满(现在就是这种情况,SynchronousQueue是一个无空间队列,你可以理解为一直就是满的),就会创建临时线程直接处理溢出的任务。如果临时线程+核心线程达到了总线程量,而且还有任务提交。线程池就会执行拒绝策略(拒绝策略是可设置且可自定义的。默认的策略的AbortPolicy:丢弃要加入线程池的任务并抛出RejectedExecutionException异常。)。到这里你应该可以明白了为什么时间相隔不打。因为你的线程池执行过程不过是1个核心线程9个临时线程与3个核心线程7个临时线程的区别而已。实质上都是10个线程在处理。你可以尝试使用其他队列作为线程任务暂存队列来看看结果。


查看完整回答
反对 回复 2018-07-26
  • 2 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号