引用
如果看了ThreadPoolExecutor的源码,看到了第一个变量便是一个AtomicInteger类型的ctl
用来描述线程池的状态(pool control state)
本文就来分析一下这个ctl。
相关代码
与ctl的相关代码如下:
观察线程池运行状态,总共有5个状态,因此可以用3个bit来表示,也就是用整数(Integer)的高3位来表示,低29位来表示工作线程数量。(最多可以表示2^29-1 : 536870911,有5亿多了)。
原理浅析
下面通过代码来看是怎么实现的
为了好分析,本人改写了一下toBinaryString()方法:
当然也有更简单的实现方式,但这不是重点。
然后写了一个测试用例:
输出:
然后再来看这3个方法就会很容易理解了,主要是一些位操作:

















