并发编程:java线程池的五个状态

1 五个状态

1.Running:运行态,也是线程池的默认状态,当new一个ThreadPoolExecutor实例之后,这个ThreadPoolExecutor的状态就是运行态。运行态能够接受新添加任务,也能够对阻塞队列中的任务进行处理。

2.SHOTDOWN:关闭态,当调用ThreadPoolExecutor实例的showdown()方法之后,这个ThreadPoolExecutor实例就会进入关闭态。关闭态能够对阻塞队列中的任务进行处理,不能够接受新添加的非空任务,但是可以接受新添加的空任务。

3.STOP:停止态,当调用ThreadPoolExecutor实例的shutdownNow()方法之后,这个ThreadPoolExecutor实例就会进入停止态。停止态不能接受新添加任务,也不能够对阻塞队列中的任务进行处理,并且会中断正在运行的任务。

4.TIDYING:整理态,当线程池中所有任务已被终止, 这个ThreadPoolExecutor实例就会进入停止态。

5.TERMINATED:结束态,当线程池处于整理态,并调用terminated()方法,执行完毕之后,就会进入结束态,此状态也表示整个线程池生命周期的结束。

2 一些成员变量

ctl是线程池中非常重要的一个参数,是一个32位的二进制数,高三位表示线程池状态,低29位表示线程池中处于Running状态的线程数。

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

COUNT_BITS表示RUNNING状态下的线程数对应二进制的位数,也就是29。

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

CAPACITY用于与ctl做与运算,得到RUNNING状态下线程的个数。CAPACITY的值为

    private static final int CAPACITY   = (1 << COUNT_BITS) - 1;
    // 00011111 11111111 111111111 11111111

五个状态变量

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

3 状态转换

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值