该方法内部有两个for循环。外for循环用于校验线程池的线程个数。内for循环用于添加for循环并启动工作线程。
- retry:打上标记位,方便后期内层for循环跳出到外层for循环。
- int c = ctl.get();获取ctl的值。
- int rs = runStateOf©; 获取ctl高三位的值。
- if (rs >= SHUTDOWN &&
! (rs == SHUTDOWN &&
firstTask == null &&
! workQueue.isEmpty()))
return false;
判断线程池的状态是不是大于SHUTDOWN。要是大于则不是RUNNING状态。
后续的判断是当前状态是SHUTDOWN,阻塞队列中存在任务。冰鞋工作线程个数为0.那在非逻辑的判断下那就是不走下面这个而是走内循环进行添加一个工作线程去阻塞队列中的任务。