刚翻了一下源码ThreadPoolExecutor
发现一旦时间达到keepAliveTime的设定值并且allowCoreThreadTimeOut为true就会中断所有空闲的worker。
对我来说有点奇怪,它只能在 runState >= SHUTDOWN 时调用中断方法:
下面的代码来自getTask()
.ThreadPoolExecutor
Runnable getTask() {
...
if (workerCanExit()) {
if (runState >= SHUTDOWN) // Wake up others
interruptIdleWorkers();
return null;
}
}
这是否意味着所有空闲线程只能在 runState >= SHUTDOWN(SHUTDOWN、STOP 或 TERMINATED)时被中断?也就是说当状态为RUNNING时它们不会被中断。