ホームページ >Java >&#&チュートリアル >Java のスレッドから未処理の例外をキャッチするにはどうすればよいですか?
Thread.UncaughtExceptionHandler を使用したスレッドからの例外のキャッチ
マルチスレッド Java アプリケーションでは、生成されたスレッドによってスローされた例外を処理することが重要です。メインクラスがスレッドを起動し、それが完了するまで待機するシナリオを考えてみましょう。スレッドが例外をスローした場合、メインクラスは join() メソッド内の標準の try-catch ブロックを使用して例外をキャッチできない可能性があります。
その理由は、ハンドルされない例外によりスレッドが終了した場合です。の場合、呼び出しスレッドに例外を伝播せずに突然終了します。この問題に対処するために、Java では Thread.UncaughtExceptionHandler インターフェイスを導入しました。
Thread.UncaughtExceptionHandler の実装
スレッドから例外をキャッチするには、Thread.UncaughtExceptionHandler インターフェイスを実装します。 uncaughtException() メソッドをオーバーライドします。このメソッドは、例外をスローしたスレッドと例外自体の 2 つのパラメーターを取ります。このメソッド内で、必要に応じて例外を処理できます。
スレッド ハンドラーの設定
ハンドラーを実装したら、setUncaughtExceptionHandler( ) 方法。これにより、スレッド内でハンドルされない例外が発生するたびにハンドラーが確実に呼び出されます。
例
次に、Thread.UncaughtExceptionHandler の使用方法を示す例を示します。
Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable ex) { System.out.println("Uncaught exception in thread: " + t.getName()); System.out.println("Exception message: " + ex.getMessage()); } }; Thread workerThread = new Thread() { @Override public void run() { // Throw an exception to demonstrate uncaught exception handling throw new RuntimeException("Exception in worker thread"); } }; workerThread.setUncaughtExceptionHandler(handler); workerThread.start();
このコードはスレッドを作成し、それにキャッチされなかった例外ハンドラーを割り当てます。スレッドを開始します。スレッドが RuntimeException をスローすると、キャッチされなかった例外ハンドラーがそれをキャッチし、スレッド名と例外メッセージを出力します。
以上がJava のスレッドから未処理の例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。