请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线程池提交任务后放在哪里

老师,假设我们设置corepoolsize=3, maximumpoolsize=10。
1.    比如第一次提交任务,是先放到队列中,然后接着创建好一个线程再从队列中获取任务,还是直接创建线程并运行了?
2.  还有当大于等于核心线程数之后,是不是新任务都直接放到队列中,然后,如果有空闲线程,由空闲线程取任务并执行,如果3个线程一直占用线程一直不空闲,那么这种情况只有当队列满的时候就才会创建新线程了啊?

正在回答 回答被采纳积分+3

1回答

翔仔 2019-03-29 17:05:30

同学好,

要解决上面的问题只要了解线程池的执行流程就不是什么难事了,

线程池的执行流程如下:

(1)提交任务后,线程池先判断线程数是否达到了核心线程数(corePoolSize)。如果未达到线程数,则创建核心线程处理任务;否则,就执行下一步;

(2)接着线程池判断任务队列是否满了。如果没满,则将任务添加到任务队列中;否则,执行下一步;

(3)接着因为任务队列满了,线程池就判断线程数是否达到了最大线程数。如果未达到,则创建非核心线程处理任务;否则,就执行饱和策略,默认会抛出RejectedExecutionException异常。


1 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    了解了,谢谢老师。因为之前你有一个图示意说队列是“接客”的,所以就有点晕(=_=)了
    回复 有任何疑惑可以回复我~ 2019-03-29 17:58:23
  • 翔仔 回复 提问者 慕尼黑7546459 #2
    哈哈,话说多容易产生误解,课程相关的问题,欢迎同学随时提问,加油:)
    回复 有任何疑惑可以回复我~ 2019-03-30 00:21:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信