【解释】
上图中的runState:-1、0、1、2、3,其实是针对于红色3位来计算的,其实应该是32位来计算,这么写是为了方便大家直观感受到这5种状态值的大小。
其实如果按照32位来计算的哈,从小到大状态的排序依然是:RUNNING<SHUTDOWN<STOP<TIDYING<TERMINATED,后面对于多种状态的判断也是通过大小来判断的。
【解释】
其中的workerCountOf(c)用来获得当前线程池中的线程数,如果小于核心线程数,则直接调用addWorker方法来向线程池中创建线程。如果添加成功,则直接return返回。如果添加失败了,则重新通过ctl.get()获取最新的ctl值。用于下面逻辑的判断。
后面的内容,参见:源码解析:ThreadPoolExecutor(5)