当线程池变为TIDYING状态时,会执行钩子函数terminated()。...当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。 ...当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING
TERMINATED 线程池彻底终止,就变成TERMINATED状态。...task任务为null的时候,就会执行processWorkerExit进行回收线程,因此关键就是上面时候task=null
四:task什么时候为null,即取不到任务
如图所示,返回null的情况有两种...,另外2个执行任务,执行完之后进入循环,符合getTask中条件1,返回null,这里至少有一条工作线程会被回收,最后会调用tryTerminate,向任意空闲线程发送中断,阻塞的线程最终都会被回收.