Bootstrap

线程池源码分析

线程池源码分析
如果不知道怎么进入此方法可以查看
线程池源码-execute
execute方法源码如下
在这里插入图片描述
在进行源码查看前我们先要弄清楚一些方法与变量
在这里插入图片描述
AtomicInteger类型在此不多描述,可以简单理解为可以保证多线程操作安全的int类型,ctl表示线程池状态与线程数量,高三位表示状态,低29位表示数量。
COUNT_BITS:
Integer.SIZE为常量32。Integer.SIZE - 3为29所以COUNT_BITS为常量29。为什么是3,因为线程池的5个状态在3~7之间要用3位表示。
CAPACITY:
(1 << COUNT_BITS) - 1表示左移29位减1,得到的是高3位为0,低29位为1. 所以CAPACITY为000 1 11111 11111111 11111111 11111111,CAPACITY是为逻辑运算存在的。
RUNNING、SHUTDOWN、STOP 、TIDYING、TERMINATED分别为线程池5个状态,都是由常数左移29位,<< COUNT_BITS表示在ctl的高3位。

runStateOf是先将CAPACITY取反,再与ctl进行与运算,得到高3位不变低29位置0,拿到线程池状态。

private static int runStateOf(int c)  { return c & ~CAPACITY; }

workerCountOf是ctl和CAPACITY进行与运算,得到线程池里线程数量。

private static int workerCountOf(int c)  { return c & CAPACITY; }

rs与wc进行或运算,rs是状态,wc是数量,进行或运算就是合并为完整的ctl

private static int ctlOf(int rs, int wc) { return rs | wc; }

代码分析
在这里插入图片描述
小于核心线程
在这里插入图片描述
未完待续。。。

;