ThreadPoolExecutor之-源码解析1

缩进强迫症
• 阅读 1376
1. ThreadPoolExecutor类的继承关系

关系图:
ThreadPoolExecutor之-源码解析1

2. 逐个展开methods: Executors + ExecutorService

ThreadPoolExecutor之-源码解析1

3. 展开methods: AbstractExecutorService

ThreadPoolExecutor之-源码解析1

4. ThreadPoolExecutor的字段:

ThreadPoolExecutor之-源码解析1
(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的方法:

ThreadPoolExecutor之-源码解析1
方法解析:###...
方法解析:###...
方法解析:###...
方法解析:###...
方法解析:###...

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
java面试准备
!(https://img2018.cnblogs.com/blog/1843904/201911/1843904201911072224451121548534426.jpg)一:多线程实现方式ThreadPoolExecutor线程池的类图!(http://assets.proce
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
4年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
4年前
Java之HttpClient调用WebService接口发送短信源码实战
摘要Java之HttpClient调用WebService接口发送短信源码实战一:接口文档!Java之HttpClient调用WebService接口源码001.png(https://imgblog.csdnimg.cn/img_convert/1e2ea7858d12c11af36e591290ba0496.png)
Wesley13 Wesley13
4年前
01.Android线程池实践基础
目录介绍01.实际开发问题02.线程池的优势03.ThreadPoolExecutor参数04.ThreadPoolExecutor使用05.线程池执行流程06.四种线程池类07.execute和submit区别08.线程池的使用技巧01.实际开发问题
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
4年前
UML画图笔记
1\.类图:             描述类图的关系,                 a)泛化(一般用于继承)表示:空心箭头实线              b)实现(实现接口)表示:空心箭头虚线              c)聚合(一对多的关系)带空心菱形箭头实线              d)组合(a由b组成)
Wesley13 Wesley13
4年前
Java基础28
1/2继承的概述:31.提高了代码复用性,简化了代码42.让类与类之间产生了继承关系,才有了后面的多态特性的存在5注意:千万不要为了获取其他类的功能简化代码,而建立继承关系,必须要类与类之间存在继承关系,继承关系:isa67子类拥有父类的成员,子类不能拥有父类
缩进强迫症
缩进强迫症
Lv1
世间无限丹青手,一片伤心画不成。
文章
4
粉丝
0
获赞
0