线程池如何回收多余的线程的呢,首先我们要知道几个基本的知识
一:线程池状态之间的转换
状态 含义
RUNNING 线程池的初始化状态是RUNNING, 线程池处在RUNNING状态时,能够接收新任务,...int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
三:什么时候会进行回收线程池的线程...队列为空) )
五:我们按照场景回收线程池线程
未调用shutdown() ,RUNNING状态下全部任务执行完成的场景
假设此时核心线程为4,最大线程为8,一开始线程是4个,当阻塞队列满了之后,增加到...即让当前任务执行完之后,再发送中断信号
不管怎么样,最后都会在进入getask方法中然后返回null,最终调用方法processWorkExit进行回收
然后对应工作线程回收的场景,无非就是下面几种情况...,另外2个执行任务,执行完之后进入循环,符合getTask中条件1,返回null,这里至少有一条工作线程会被回收,最后会调用tryTerminate,向任意空闲线程发送中断,阻塞的线程最终都会被回收.