java线程池问题, 欢迎解答

https://img4.mukewang.com/5b59749200018d3112700496.jpg

https://img.mukewang.com/5b5975ae0001655508410535.jpg

https://img1.mukewang.com/5b5974a20001f15a09660548.jpg

  • 有上图可以看出来 , 将线程池的数量设置为 1 和 3 , 完成的时间是差不多的 , 这么什么原因呢 ?


九州编程
浏览 684回答 2
2回答

慕桂英4014372

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

Helenr

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

相关分类

Java