多线程中需要各个线程自己处理异常,外部线程是无法try-catch捕获异步线程抛出的异常,只能内部线程自己try-catch处理。但是不可能所有都自己处理,有些需要外部处理,搜寻后有几种方法。
1、自定义未捕获异常处理器
Thead确实提供了一个setUncaughtExceptionHandler方法,我们只需要将自定义未捕获异常处理器作为参数传入进入就可以了。
public class ThreadException {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.setUncaughtExceptionHandler();
myThread.start();
}
}
class MyThread extends Thread {
@Override
public void run()
{
System.out.println("线程名:" + Thread.currentThread().getName());
//发生异常
int i = 1 / 0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void setUncaughtExceptionHandler()
{
this.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("捕获线程抛出的异常:" + e.getMessage());
}
});
}
}
2025/12/28...大约 1 分钟
