为什么运行状态存储在ThreadPoolExecutor中的高位中?

时间:2017-06-19 11:15:40

标签: java

    private static final int COUNT_BITS = Integer.SIZE - 3;    
// runState is stored in the high-order bits
private static final int RUNNING    = -1 << COUNT_BITS;
private static final int SHUTDOWN   =  0 << COUNT_BITS;

如上所述。为什么运行状态存储在ThreadPoolExecutor的高位中?

1 个答案:

答案 0 :(得分:1)

看一下这段代码in the source

private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY   = (1 << COUNT_BITS) - 1;

// runState is stored in the high-order bits
private static final int RUNNING    = -1 << COUNT_BITS;
private static final int SHUTDOWN   =  0 << COUNT_BITS;
private static final int STOP       =  1 << COUNT_BITS;
private static final int TIDYING    =  2 << COUNT_BITS;
private static final int TERMINATED =  3 << COUNT_BITS;

// Packing and unpacking ctl
private static int runStateOf(int c)     { return c & ~CAPACITY; }
private static int workerCountOf(int c)  { return c & CAPACITY; }
private static int ctlOf(int rs, int wc) { return rs | wc; }

运行状态存储在高位中;工人计数存储在低位中。将两者打包成一个int只会节省一点内存。