タイトルに示されているアイデアの多くの例の 1 つとして、java.util.concurrent.locks.AbstractQueuedSynchronizerの次のコードを検討してください。
1258 public final boolean tryAcquireSharedNanos(int arg, long nanosTimeout) throws Interrupted Exception {
1259 if (Thread.interrupted())
1260 throw new InterruptedException();
1261 return tryAcquireShared(arg) >= 0 ||
1262 doAcquireSharedNanos(arg, nanosTimeout);
1263 }
Thread.interrupted()
ほとんどのブロッキング ライブラリ メソッドが、インスタンス メソッドではなく静的メソッドを呼び出すことによって割り込みに応答するのはなぜですかisInterrupted()
。静的メソッドを呼び出すと、中断されたステータスもクリアされるため、タスク処理コードでさえ InterruptionException を飲み込んだ場合、呼び出し元が中断されたステータスを知る方法はありません。