1. ThreadPoolExecutor类的继承关系
关系图:
2. 逐个展开methods: Executors + ExecutorService
3. 展开methods: AbstractExecutorService
4. ThreadPoolExecutor的字段:
4.1 原子类型的整型值ctl(32位的AtomicInteger),绑定两个内容:
高(左边)3位:runState, 表示线程池的执行状态; 见(2)
低(右边)29位: workerCount, 标识任务数, 最大是2^29=5亿+;
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
// ctlOf(RUNNING, 0) 表示初始化为 RUNNING状态: 可以接收任务
4.2 线程池状态值: runState 5个状态
;
// runState is stored in the high-order bits
private static final int RUNNING = -1 << COUNT_BITS;
private static final int SHUTDOWN = 0 << COUNT_BITS;
private static final int STOP = 1 << COUNT_BITS;
private static final int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
RUNNING
说明: 接受新任务, 并处理排队的任务;
SHUTDOWN
说明: 不再接受新的任务,但已入队的任务会继续处理
STOP
说明: 不再接受新的任务,也不处理排队的任务, 而且还要中断正在进行的任务;
TIDYING
说明: 所有任务都已终止,workerCount为零,线程过渡到状态清理, 即将调用 terminated() 钩子方法;
terminated()
是一个模板方法, 自定义扩展线程池可以实现,用来做一些扩展操作;
protected void terminated() { }
TERMINATED
说明: terminated() 已执行完;
4.3 跟线程池执行时逻辑流程相关的属性:
…
…
4.9 CAPACITY
: (2^29)-1, 常量定义: 限定 workerCount的最大值;
4.10. COUNT_BITS
: 29 , 常量值, 标识 workerCount表示的整数值的位数(ctl值的前低29位);
5.ThreadPoolExecutor的方法:
方法解析:###…
方法解析:###…
方法解析:###…
方法解析:###…
方法解析:###…
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 hi@niewj.com