2 回答

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