目录
学习内容重点:
1、线程池中基本属性和方法源码解析
2、线程池的五种状态变换源码分析
3、线程池添加线程源码解析
4、线程池线程运行执行任务源码解析
5、线程池shutdown源码解析
6、线程池中线程退出机制源码解析
线程池源码的基础属性和方法
在线程池的源码中,会通过一个AtomicInteger类型的变量ctl,来表示线程池的状态和当前线程池中的工作线程数量。
一个Integer占4个字节,也就是32个bit,线程池有5个状态:
2个bit能表示4种状态,那5种状态就至少需要三个bit位,Integer.SIZE为32,所以COUNT_BITS为29,最终各个状态对应的二级制为:
所以,只需要使用一个Integer数字的最高三个bit,就可以表示5种线程池的状态,而剩下的29个bit就可以用来表示工作线程数
同时,还有一些相关的方法:
execute方法
当执行线程池的execute方法时:
addWorker方法
所以,对于addWorker方法,核心逻辑就是:
- 先判断工作线程数是否超过了限制
- 修改ctl,使得工作线程数+1
- 构造Work对象,并把它添加到workers集合中
- 启动Work对象对应的工作线程