深入分析java线程池的实现原理

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));//11100000000000000000000000000000
private static final int COUNT_BITS = Integer.SIZE - 3;//29
private static final int CAPACITY   = (1 << COUNT_BITS) - 1;//00100000000000000000000000000000(2^29) -1 => 00011111111111111111111111111111

// runState is stored in the high-order bits
//根据补码做移位运算
private static final int RUNNING    = -1 << COUNT_BITS;//[111000000000000000000000000000000] => 10000000000000000000000000000001(原码) -> 11111111111111111111111111111111(补码) -> 11100000000000000000000000000000(左移29位)
private static final int SHUTDOWN   =  0 << COUNT_BITS;//00000000000000000000000000000000
private static final int STOP       =  1 << COUNT_BITS;//00100000000000000000000000000000
private static final int TIDYING    =  2 << COUNT_BITS;//01000000000000000000000000000000
private static final int TERMINATED =  3 << COUNT_BITS;//01100000000000000000000000000000

//查看高3位(线程状态) ~CAPACITY = 11100000000000000000000000000000
private static int runStateOf(int c)     { return c & ~CAPACITY; }

//计算低29位(线程数)
private static int workerCountOf(int c)  { return c & CAPACITY; }

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

https://mp.weixin.qq.com/s/qyRWTx47jpqtLh7QPfRNOw

你可能感兴趣的:(深入分析java线程池的实现原理)