私はいくつかのJavaスレッド中断を読んでいましたが、私はいくつかのことを理解していません。誰かが私を説明してくれることを願ってキャンセルをサポートするが、それでも 割り込み可能ブロッキングメソッドを呼び出すことはありません終了前に中断を復元する取り消し不能なタスク
活動は、ループにそれらを呼び出すする必要があります:だから、それは次のコード
public Integer getInteger(BlockingQueue<Integer> queue) { boolean interrupted = false; try { while (true) { try { return queue.take(); } catch (InterruptedException e) { interrupted = true; // fall through and retry } } } finally { if (interrupted) Thread.currentThread().interrupt(); } }
次のように説明があるが行われています 割り込みが検出されたときに再試行します。この場合、リストに示されているように、 をローカルに中断状態に保存し、戻す直前に復元する必要があります( )。 catchする直後ではなく、 InterruptedExceptionです。ほとんどの割り込み可能なブロッキング メソッドは、エントリの割り込みステータスをチェックし、 InterruptedExceptionが設定されていれば直ちにスローするので、中断されたステータスを早期に設定すると、無限ループになります。 (可能な限り中断するように応答するように割り込み可能な方法は 通常、ブロックまたは重大な 作業を行う前に、割り込みをポーリング。)
我々はローカルに中断された状態を保存しなければならない理由を私は理解していません。
私はいくつかの説明を聞いてうれしいです。
Mmmm。面白い... –