线程池源码分析
如果不知道怎么进入此方法可以查看
线程池源码-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; }
代码分析
小于核心线程
未完待续。。。