线程池处在不同的状态时,它的处理能力是不同的。
线程池不同状态之间的转换时机及转换关系如下图。
runStateOf获取ctl高三位,也就是线程池的状态。workerCountOf获取ctl低29位,也就是线程池中线程数。ctlOf计算ctlOf新值,也就是线程池状态和线程池个数。
你可能会疑问“为什么要介绍上面这些?”,这是因为接下来的源码分析会用到这些基础的知识点。一般,我们使用ThreadPoolExecutor的execute方法提交任务,所以从execute的源码入手。
为了更轻松的理解上图中的源码,我又画了一个流程图。