ThreadPoolExecutor的workQueue参数
来源:8-3 线程池-3
![](http://img1.sycdn.imooc.com/user/54584eff000195a302200220-100-100.jpg)
weibo_小朋打酱油_0
2018-08-13
当前线程数 > corePoolSize & < maxPoolSize时,将任务放入workQueue;
请问老师,workQueue中的任务,什么时候被取出来执行?workQueue满了以后,当有任务A再来的时候,是从workQueue中取出任务给线程执行,还是让线程执行当前申请的任务A?
写回答
1回答
-
Jimin
2018-08-13
你好,我们先来简单归纳一下:
1、当提交任务时,如果运行的线程数量少于corePoolSize,即使当前有线程处于空闲状态(idle),那么仍然会创建一个新的线程来处理提交的任务。
2、如果线程的数量大于corePoolSize并且小于maximumPoolSize,当且仅当队列满了的时候,才会创建一个新的线程来处理提交的任务。
3、如果线程的数量大于maximumPoolSize,那么就会执行相应的拒绝策略。
再来看你的问题:
workQueue满了以后,当有任务A再来的时候,执行的是创建线程池时指定的拒绝策略,因为当前线程池已经大于maxPoolSize + workQueue size了,不能再分配更多的资源了。如果尝试去让一个新的线程去执行,很可能会导致服务器内存不够用。
接下来再说workQueue中的任务什么时候被取出来执行。workQueue里有任务,代表当前有maxPoolSize 个线程在执行,这些线程执行的任务结束时,处于空闲状态,就会取出workQueue中任务执行。这样也体现了线程池调度线程执行的本质。既控制了资源的分配,也控制了线程的调度。
112019-04-05
相似问题