Javaのマルチスレッドで例外をキャッチする方法は?

Javaのマルチスレッドで例外処理する方法はいくつかあります:

  1. runメソッドの中でtry-catch文を使用して例外をキャッチし、catchブロックで例外を処理します。
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        try {
            // 执行线程任务
        } catch (Exception e) {
            // 处理异常
        }
    }
}
  1. ExecutorServiceのsubmitメソッドを使用してタスクを提出する際は、Futureオブジェクトのgetメソッドを使って実行結果を取得し、getメソッドを呼び出す際に例外をキャッチすることができます。
ExecutorService executorService = Executors.newFixedThreadPool(10);
Future<?> future = executorService.submit(new MyRunnable());
try {
    future.get();
} catch (Exception e) {
    // 处理异常
}
  1. 未捕捉例外を処理するためにUncaughtExceptionHandlerインターフェースを使用します。ThreadクラスのsetDefaultUncaughtExceptionHandlerメソッドを使用して、デフォルトの未捕捉例外ハンドラを設定することができます。また、ThreadクラスのsetUncaughtExceptionHandlerメソッドを使用して、特定のスレッドに未捕捉例外ハンドラを設定することもできます。
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        // 处理未捕获异常
    }
});
  1. 自作のスレッド未処理例外処理を実装するために、Thread.UncaughtExceptionHandlerインタフェースを使用し、runメソッド内でtry-catchステートメントを使用して例外をキャッチし、UncaughtExceptionHandlerインタフェースのuncaughtExceptionメソッドを使用して例外をスローします。
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        try {
            // 执行线程任务
        } catch (Exception e) {
            Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
        }
    }
}

Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        // 处理未捕获异常
    }
};
Thread thread = new Thread(new MyRunnable());
thread.setUncaughtExceptionHandler(handler);
thread.start();

具体の要件に合わせて処理方法を選択することができます。

bannerAds