猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
java线程池问题, 欢迎解答
有上图可以看出来 , 将线程池的数量设置为 1 和 3 , 完成的时间是差不多的 , 这么什么原因呢 ?
九州编程
浏览 761
回答 2
2回答
慕桂英4014372
处理的内容太少了 看不出消耗 多线程和单线程完全没什么区别 你里面放个循环 再试试
0
0
0
Helenr
问题在于你使用的线程暂存队列SynchronousQueue。SynchronousQueue是一个无空间的队列。还有你线程池数量的限制。线程池有两个数量。核心线程量和总线程量。你说的1和3是核心线程量。10是总线程量。线程任务提交给线程池的流程是首先看是否有空闲的核心线程,如果有就交于核心线程处理。如果没有就到暂存队列中等待核心线程释放。如果暂存队列也被放满(现在就是这种情况,SynchronousQueue是一个无空间队列,你可以理解为一直就是满的),就会创建临时线程直接处理溢出的任务。如果临时线程+核心线程达到了总线程量,而且还有任务提交。线程池就会执行拒绝策略(拒绝策略是可设置且可自定义的。默认的策略的AbortPolicy:丢弃要加入线程池的任务并抛出RejectedExecutionException异常。)。到这里你应该可以明白了为什么时间相隔不打。因为你的线程池执行过程不过是1个核心线程9个临时线程与3个核心线程7个临时线程的区别而已。实质上都是10个线程在处理。你可以尝试使用其他队列作为线程任务暂存队列来看看结果。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续