ホームページ > Java > &#&チュートリアル > JavaでInterruptedExceptionエラーをキャッチする方法

JavaでInterruptedExceptionエラーをキャッチする方法

WBOY
リリース: 2023-04-18 20:10:34
転載
900 人が閲覧しました

InterruptedException エラーのキャッチ

以下のコード スニペットを確認してください:

public class Task implements Runnable {
	private final BlockingQueue queue = ...;
	@Override
	 public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			String result = getOrDefault(() -> queue.poll(1L, TimeUnit.MINUTES), "default");
			//do smth with the result
		}
	}
	T getOrDefault(Callable supplier, T defaultValue) {
		try {
			return supplier.call();
		}
		catch (Exception e) {
			logger.error("Got exception while retrieving value.", e);
			return defaultValue;
		}
	}
}
ログイン後にコピー

コードの問題は、中断されたフラグが決して復元されないため、スレッドを終了することはできません:

1. コードを実行しているスレッドは中断されます。
2.BlockingQueue #poll() メソッドは InterruptedException をスローし、割り込みフラグをクリアします。
3.while のループ条件 (!Thread.currentThread().isInterrupted()) の判定は、マークがクリアされているため true となります。

この動作を防ぐには、メソッドが明示的に (InterruptedException をスローするように宣言することによって) または暗黙的に (プリミティブ例外を宣言/スローすることによって) InterruptedException 例外がスローされたときに常にキャッチし、中断されたフラグを復元します。

rree

以上がJavaでInterruptedExceptionエラーをキャッチする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート