Java でスレッドから例外をキャッチする
マルチスレッド アプリケーションでは、異なるスレッド内でスローされた例外を管理することが困難になる場合があります。メインクラスが新しいスレッドを開始し、それによって生成されたランタイム例外をキャッチしようとするシナリオを考えてみましょう。
// Original Code public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; try { t.start(); t.join(); } catch (RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stopped"); } }
このコードでは、メイン スレッドは join() を使用して子スレッドが完了するのを待ちます。方法。ただし、子スレッドが例外をスローしても、メインスレッドはそれをキャッチしません。
スレッドのキャッチされない例外ハンドラ
この問題に対処するために、Java はスレッドを提供します。 .UncaughtExceptionHandler インターフェイス。このインターフェイスを実装し、スレッドに割り当てることで、そのスレッド内でスローされたキャッチされなかった例外を処理できます。
// Using Uncaught Exception Handler public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread th, Throwable ex) { System.out.println("Uncaught exception: " + ex); } }; Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; t.setUncaughtExceptionHandler(h); t.start(); t.join(); System.out.println("Main stopped"); } }
この変更されたコードでは、
以上がJava のスレッドによってスローされた例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。