if ((runStateAtLeast(ctl.get(), STOP) ||
(Thread.interrupted() &&
runStateAtLeast(ctl.get(), STOP))) &&
!wt.isInterrupted())
wt.interrupt();
先看这里判断
1)如果线程池已经是STOP状态并且线程没有被中断,那么就要中断当前线程;
2)1)条件不成立,证明线程池状态是RUNNING或者SHUTDOWN状态,再判断一下当前线程中断信号,如果中断信号是true,可能是用户调用shutdownNow方法导致,也可能是其他原因导致,再需要判断一下线程池状态,如果是STOP状态,则要中断当前线程;
为什么线程池是STOP状态就要中断线程,这是shutdownNow方法的定义,如果还没来到if条件线程池已经是STOP状态,但是中断信号被复位,这里就要判断,如果是跳过了if条件线程池才是STOP状态,线程也会接收到中断信号,满足shutdownNow方法的定义;
结论:
线程池是STOP状态那就要保留中断信号,如果不是,就要复位中断信号。