のソースコードをThreadPoolExecutor
調べたところ、時間がkeepAliveTimeの設定値に達し、allowCoreThreadTimeOutがtrueになると、アイドル状態のすべてのワーカーに割り込みが発生することがわかりました。
runState> = SHUTDOWNの場合にのみ割り込みメソッドを呼び出すことができるのは、私には少し奇妙です。
以下のコードは、のメソッドからのものgetTask()
ですThreadPoolExecutor
。
Runnable getTask() {
...
if (workerCanExit()) {
if (runState >= SHUTDOWN) // Wake up others
interruptIdleWorkers();
return null;
}
}
これは、runState> = SHUTDOWN(SHUTDOWN、STOP、またはTERMINATED)の場合にのみ、すべてのアイドルスレッドを中断できることを意味しますか?つまり、状態がRUNNINGのときに中断されることはありません。