采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
当前线程数 > corePoolSize & < maxPoolSize时,将任务放入workQueue;
请问老师,workQueue中的任务,什么时候被取出来执行?workQueue满了以后,当有任务A再来的时候,是从workQueue中取出任务给线程执行,还是让线程执行当前申请的任务A?
你好,我们先来简单归纳一下:
1、当提交任务时,如果运行的线程数量少于corePoolSize,即使当前有线程处于空闲状态(idle),那么仍然会创建一个新的线程来处理提交的任务。
2、如果线程的数量大于corePoolSize并且小于maximumPoolSize,当且仅当队列满了的时候,才会创建一个新的线程来处理提交的任务。
3、如果线程的数量大于maximumPoolSize,那么就会执行相应的拒绝策略。
再来看你的问题:
workQueue满了以后,当有任务A再来的时候,执行的是创建线程池时指定的拒绝策略,因为当前线程池已经大于maxPoolSize + workQueue size了,不能再分配更多的资源了。如果尝试去让一个新的线程去执行,很可能会导致服务器内存不够用。
接下来再说workQueue中的任务什么时候被取出来执行。workQueue里有任务,代表当前有maxPoolSize 个线程在执行,这些线程执行的任务结束时,处于空闲状态,就会取出workQueue中任务执行。这样也体现了线程池调度线程执行的本质。既控制了资源的分配,也控制了线程的调度。
workQueue里有任务,代表当前有maxPoolSize 个线程在执行,这些线程执行的任务结束时, 这里应该改为 “当前有corePoolSize个线程在执行” 吧
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.1k 15
3.5k 12
1.2k 12