Java のメインスレッドでサブスレッドで発生した例外をキャッチする方法
Java メインスレッドは次の方法で子スレッドの例外をキャッチできます:
- サブスレッドのrun()メソッド内で、try-catch文を使用して例外をキャッチし、catchブロックで例外を処理できます。その際、catchブロック内で例外情報をメインスレッドに渡すことができます。
Thread thread = new Thread(() -> {
try {
// 子线程的逻辑代码
} catch (Exception e) {
// 异常处理代码
}
});
thread.start();
- スレッドにThread.UncaughtExceptionHandlerインターフェイスを実装: サブスレッドのUncaughtExceptionHandlerインスタンスを設定すると、サブスレッドで発生した未キャッチの例外をキャッチおよび処理できます。UncaughtExceptionHandlerのuncaughtException()メソッドで例外を処理し、例外情報をメインスレッドに渡します。
Thread thread = new Thread(() -> {
// 子线程的逻辑代码
});
thread.setUncaughtExceptionHandler((t, e) -> {
// 异常处理代码
});
thread.start();
- Thread.setDefaultUncaughtExceptionHandler()メソッドを使う: すべてのスレッドに対してデフォルトのUncaughtExceptionHandlerインスタンスを設定し、すべてのスレッドにおける未処理例外の捕捉と処理に用いられる。
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
// 异常处理代码
});
どの手段を用いても、主スレッドは例外処理コードにおいて子スレッドから発生した例外を取得し、適切な処理を行うことができます。