3
私はなぜそれがrunState < STOP
とrunState >= STOP
をチェックする必要がない奇妙なコード
if (runState < STOP && Thread.interrupted() && runState >= STOP)
thread.interrupt();
ThreadPoolExecutor $ Worker.runTaskに、このような奇妙なコードを発見しました。 何らかの理由でこのような二重チェックが必要な理由を説明するコメントがありますが、わかりません。
したがって、式の最終的な値を計算するには、メモリrunStateから取得し、次にThread.interrupted()を呼び出してから、メモリrunState(最初のrunStateは2番目のものと異なる場合があります)を取り、そして?それはshuttingDownNow
でない限り、それだけで
if (runState < STOP)
Thread.interrupted();
しなければならなかった。しかし、我々は、並行性を持っているように、コードの