线程池如何回收多余的线程的呢,首先我们要知道几个基本的知识
一:线程池状态之间的转换
状态 含义
RUNNING 线程池的初始化状态是RUNNING, 线程池处在RUNNING状态时,能够接收新任务,...,即核心线程不会回收true,否则所有工作线程都有可能回收
boolean timed=allowCoreThreadTimeOut||当前线程是否大于核心线程
if((当前线程数大于线程池最大线程数|...|(timed&&当前线程是否超时))&&(还有工作线程||队列为空) )
五:我们按照场景回收线程池线程
未调用shutdown() ,RUNNING状态下全部任务执行完成的场景
假设此时核心线程为...即让当前任务执行完之后,再发送中断信号
不管怎么样,最后都会在进入getask方法中然后返回null,最终调用方法processWorkExit进行回收
然后对应工作线程回收的场景,无非就是下面几种情况...,另外2个执行任务,执行完之后进入循环,符合getTask中条件1,返回null,这里至少有一条工作线程会被回收,最后会调用tryTerminate,向任意空闲线程发送中断,阻塞的线程最终都会被回收.