关于线程池提交任务后放在哪里
来源:9-8 Java线程池-2
慕尼黑7546459
2019-03-29
老师,假设我们设置corepoolsize=3, maximumpoolsize=10。
1. 比如第一次提交任务,是先放到队列中,然后接着创建好一个线程再从队列中获取任务,还是直接创建线程并运行了?
2. 还有当大于等于核心线程数之后,是不是新任务都直接放到队列中,然后,如果有空闲线程,由空闲线程取任务并执行,如果3个线程一直占用线程一直不空闲,那么这种情况只有当队列满的时候就才会创建新线程了啊?
写回答
1回答
-
翔仔
2019-03-29
同学好,
要解决上面的问题只要了解线程池的执行流程就不是什么难事了,
线程池的执行流程如下:
(1)提交任务后,线程池先判断线程数是否达到了核心线程数(corePoolSize)。如果未达到线程数,则创建核心线程处理任务;否则,就执行下一步;
(2)接着线程池判断任务队列是否满了。如果没满,则将任务添加到任务队列中;否则,执行下一步;
(3)接着因为任务队列满了,线程池就判断线程数是否达到了最大线程数。如果未达到,则创建非核心线程处理任务;否则,就执行饱和策略,默认会抛出RejectedExecutionException异常。
122019-03-30
相似问题