线程池的状态
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
这个 ctl 维护工作线程个数及线程池的状态,int32 位的数据类型,高3位维护线程状态,低29位维护工作线程对的数量
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY = (1 << COUNT_BITS) - 1;
// runState is stored in the high-order bits
//创建线程了正常执行,
private static final int RUNNING = -1 << COUNT_BITS;
//shutdown操作,停止接收execute提交过来的任务,正在处理的任务依然会执行,队列中的任务也会正常做完
private static final int SHUTDOWN = 0 << COUNT_BITS;
//执行shutdownNow() ,进入stop 状态 ,正在处理的任务都会被中断,阻塞队列中的任务都不会被执行
private static final int STOP = 1 << COUNT_BITS;
// 提供的过度状态,可自己实现
private static final int TIDYING = 2 << COUNT_BITS;
// 线程池完全被销毁
private static final int TERMINATED = 3 << COUNT_BITS;