了解下JUC的线程池学习二

1.状态控制

    状态控制主要围绕原子整型成员变量ctl

       private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

       private static final int COUNT_BITS = Integer.SIZE - 3;

       private static final int COUNT_MASK = (1 << COUNT_BITS) - 1;
       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;
       // 通过ctl值获取运行状态
       private static int runStateOf(int c)    { return c & ~COUNT_MASK; }
       // 通过ctl值获取工作线程数
       private static int workerCountOf(int c)  { return c & COUNT_MASK; }
       // 通过运行状态和工作线程数计算ctl的值,或运算
      private static int ctlOf(int rs, int wc) { return rs | wc; }
      private static boolean runStateLessThan(int c, int s) {
            return c < s;
     }
     private static boolean runStateAtLeast(int c, int s) {
            return c >= s;
     }
     private static boolean isRunning(int c) {
            return c < SHUTDOWN;
     }
     // CAS操作线程数增加1
    private boolean compareAndIncrementWorkerCount(int expect) {
             return ctl.compareAndSet(expect, expect + 1);
    }
    // CAS操作线程数减少1
    private boolean compareAndDecrementWorkerCount(int expect) {
             return ctl.compareAndSet(expect, expect - 1);
    }
    // 线程数直接减少1
    private void decrementWorkerCount() {
             ctl.addAndGet(-1);
     }
    分析:工作线程上限数量位的长度是COUNT_BITS,它的值是Integer.SIZE - 3,也就是正整数29
              整型包装类型Integer实例的大小是4 byte,一共32 bit,也就是一共有32个位用于存放0或者1。
              在ThreadPoolExecutor实现中,使用32位的整型包装类型存放工作线程数和线程池状态。
              其中,低29位用于存放工作线程数,而高3位用于存放线程池状态,所以线程池的状态最多只能有2^3种。
              工作线程上限数量为2^29 - 1,超过5亿,这个数量在短时间内不用考虑会超限。
 
     下面这段应该是进制运算:
             工作线程上限数量掩码COUNT_MASK,它的值是(1 < COUNT_BITS) - l,也就是1左移29位,再减去1,如果补全32位,它的位视图如下:
             

 

 

学习来源:https://www.cnblogs.com/throwable/p/13574306.html
posted @ 2020-09-02 11:08  小窝蜗  阅读(253)  评论(0编辑  收藏  举报