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