1. ThreadPoolExecutor类的继承关系

关系图:
image.png

2. 逐个展开methods: Executors + ExecutorService

image.png

3. 展开methods: AbstractExecutorService

image.png

4. ThreadPoolExecutor的字段:

image.png
(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状态: 可以接收任务

(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() 已执行完;
(3). 跟线程池执行时逻辑流程相关的属性:
...
...
(9). CAPACITY : (2^29)-1, 常量定义: 限定 workerCount的最大值;
(10). COUNT_BITS: 29 , 常量值, 标识 workerCount表示的整数值的位数(ctl值的前低29位);

5.ThreadPoolExecutor的方法:

image.png
方法解析:###...
方法解析:###...
方法解析:###...
方法解析:###...
方法解析:###...


丰木
322 声望19 粉丝

遇见超乎想象的自己!


引用和评论

0 条评论