Java 多线程异常处理:主线程捕获子线程异常
要捕获子线程中抛出的异常,可以通过设置主线程的 UncaughtExceptionHandler 来实现。
在主线程中,可以通过 Thread.setDefaultUncaughtExceptionHandler() 方法设置默认的 UncaughtExceptionHandler,或者通过 Thread.currentThread().setUncaughtExceptionHandler() 方法设置当前线程的 UncaughtExceptionHandler。
在 UncaughtExceptionHandler 的 uncaughtException() 方法中,可以处理子线程中抛出的异常。
下面是一个示例代码:
public class MainThread {
public static void main(String[] args) {
// 设置主线程的 UncaughtExceptionHandler
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 处理子线程中抛出的异常
System.out.println('捕获到子线程中抛出的异常:' + e);
}
});
// 创建子线程
Thread childThread = new Thread(new Runnable() {
@Override
public void run() {
// 抛出异常
throw new RuntimeException('子线程中抛出的异常');
}
});
// 设置子线程的 UncaughtExceptionHandler
childThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 处理子线程中抛出的异常
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
}
});
// 启动子线程
childThread.start();
}
}
在上面的示例中,主线程设置了默认的 UncaughtExceptionHandler 来处理子线程中抛出的异常。子线程设置了自己的 UncaughtExceptionHandler,当子线程中抛出异常时,会调用主线程的 UncaughtExceptionHandler 来处理异常。
原文地址: https://www.cveoy.top/t/topic/qeKv 著作权归作者所有。请勿转载和采集!