07-线程异常处理

nobility 发布于 2021-05-04 2325 次阅读


线程异常处理

子线程中捕获异常

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();
  }
}
此作者没有提供个人介绍
最后更新于 2021-05-04