ThreadPoolExecutor之-源码解析1

1. ThreadPoolExecutor类的继承关系

关系图:
image.png

2. 逐个展开methods: Executors + ExecutorService

image.png

3. 展开methods: AbstractExecutorService

image.png

4. ThreadPoolExecutor的字段:

image.png

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的方法:

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


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 hi@niewj.com

×

喜欢就点赞,疼爱就打赏