1. ホーム
  2. java

[解決済み] catch InterruptException ブロックで Thread.currentThread.interrupt() を呼び出すのはなぜですか?

2022-04-20 04:55:53

質問

メソッドを呼び出す理由 Thread.currentThread.interrupt() をキャッチブロックの中に入れてください。

どのように解決するのですか?

これは 状態を維持する .

をキャッチすると InterruptedException を飲み込むと、本質的に上位のメソッドやスレッドグループが割り込みに気づくのを防ぐことができます。これは問題を引き起こす可能性があります。

を呼び出すことで Thread.currentThread().interrupt() そのため、上位の割り込みハンドラがそれに気付き、適切に処理できるようになります。

Java並行処理の実際 で詳しく説明しています。 第7.1.3章 割り込みへの対応 . そのルールは

スレッドの割り込みポリシーを実装するコードのみが割り込み要求を飲み込むことができます。汎用のタスクとライブラリのコードは決して割り込み要求を飲み込んではいけません。