ホームページ > Java > &#&チュートリアル > Java のスレッドによってスローされた例外をキャッチするにはどうすればよいですか?

Java のスレッドによってスローされた例外をキャッチするにはどうすればよいですか?

DDD
リリース: 2024-12-04 00:26:10
オリジナル
869 人が閲覧しました

How Can I Catch Exceptions Thrown by Threads in Java?

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");
    }
}
ログイン後にコピー

この変更されたコードでは、

  1. の新しいインスタンスを作成します。 UncaughtExceptionHandler.
  2. を使用して UncaughtExceptionHandler を子スレッドに割り当てます。 setUncaughtExceptionHandler() メソッド。
  3. 子スレッド内でキャッチされない例外が発生すると、ハンドラーの uncaughtException() メソッドが呼び出され、例外を適切に処理できるようになります。

以上がJava のスレッドによってスローされた例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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