线程异常处理
子线程中捕获异常
public static void main(String[] args) {
new Thread(() -> {
try {
throw new RuntimeException();
} catch (RuntimeException e) {
e.printStackTrace();
}
}).start();
}
线程异常处理器
Java中异常处理器策略:若有父线程则使用父线程的异常处理器,若没有父线程就会使用全局异常处理器,若我们设置了全局异常处理器就会使用我们的异常处理器,否则就会自行处理也就是将堆栈信息打印
实现Thread.UncaughtExceptionHandler
接口的uncaughtException
方法,通过setDefaultUncaughtExceptionHandler()
方法可以为以下几种范围设置异常处理器
- 使用
Thread
类为全局设置异常处理器 - 使用某个线程对象单独为某个线程设置异常处理器
- 使用线程池对象为某个线程池设置异常处理器
public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
Logger logger = Logger.getAnonymousLogger(); //使用jdk的日志打印工具
logger.log(Level.WARNING, "线程异常", t.getName());
System.out.println("[" + t.getName() + "] " + e.getMessage());
}
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
new Thread(() -> {
throw new RuntimeException("异常测试");
}).start();
}
}
Comments NOTHING