前言
在不设置异常的处理方式时,它会停止,线程会丢失了状态数据。在线程的api中有一个对线程异常处理的方法setUncaughtExceptionHandler(异常类),该异常类需要实现UncaughtExceptionHandler接口
示例代码
/**
* 自定义异常的方式处理线程异常
* @author terry
* @version 1.0
* @date 2022/6/2 22:15
*/
class MyException implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName()+"该线程产生了异常");
System.out.println(e+"处理方式");
}
}
public class Test extends Thread{
public static void main(String[] args) {
Test myEx = new Test();
//在不设置异常的处理方式时,它会停止,线程会丢失了状态数据
myEx.setUncaughtExceptionHandler(new MyException());
myEx.start();
}
@Override
public void run(){
//设置一个空指针的异常
String str = null;
System.out.println(str.length());
}
}
打印输出:
Thread-0该线程产生了异常
java.lang.NullPointerException处理方式
内部类和匿名类的方式处理异常
/**
* 内部类和匿名类的方式处理异常
* */
public class MyException2{
public static void main(String[] args) {
Thread t = new Thread(){
public void run(){
//设置一个空指针的异常
String str = null;
System.out.println(str.length());
}
};
t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName()+"该线程产生了异常");
System.out.println(e+"处理方式");
}
});
t.start();
}
}
打印输出:
Thread-0该线程产生了异常
java.lang.NullPointerException处理方式