多线程核心7:处理未捕获的异常

使用UncaughtExceptionHandler的原因

  • 主线程可以轻松发现异常,子线程不能
  • 子线程的异常无法用传统方式捕获
  • 在捕获到异常时也能进行处理,提高健壮性

全局异常处理使用方式

  1. 实现Thread.UncaughtExceptionHandler接口

    public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
          
          
        private String name;
    
        public MyUncaughtExceptionHandler(String name) {
          
          
            this.name = name;
        }
    
        @Override
        public void uncaughtException(Thread t, Throwable e) {
          
          
            Logger logger = Logger.getAnonymousLogger();
            logger.log(Level.WARNING, "线程异常,终止啦" + t.getName());
            System.out.println(name + "捕获了异常" + t.getName() + "异常");
        }
    }
    
    
  2. 在可能出现异常的程序中使用

    public class UseOwnUncaughtExceptionHandler implements Runnable {
          
          
        public static void main(String[] args) throws InterruptedException {
          
          
            MyUncaughtExceptionHandler handler = new MyUncaughtExceptionHandler("捕获器1");
            Thread.setDefaultUncaughtExceptionHandler(handler);
    
            new Thread(new UseOwnUncaughtExceptionHandler(), "MyThread-1").start();
            Thread.sleep(300);
            new Thread(new UseOwnUncaughtExceptionHandler(), "MyThread-2").start();
            Thread.sleep(300);
            new Thread(new UseOwnUncaughtExceptionHandler(), "MyThread-3").start();
            Thread.sleep(300);
            new Thread(new UseOwnUncaughtExceptionHandler(), "MyThread-4").start();
        }
    
        @Override
        public void run() {
          
          
            throw new RuntimeException();
        }
    }
    ---------------------------------------------------------------
    一月 06, 2021 8:26:40 下午 threadcoreknowledge.uncaughtexception.MyUncaughtExceptionHandler uncaughtException
    警告: 线程异常,终止啦MyThread-1
    捕获器1捕获了异常MyThread-1异常
    一月 06, 2021 8:26:41 下午 threadcoreknowledge.uncaughtexception.MyUncaughtExceptionHandler uncaughtException
    警告: 线程异常,终止啦MyThread-2
    捕获器1捕获了异常MyThread-2异常
    捕获器1捕获了异常MyThread-3异常
    一月 06, 2021 8:26:41 下午 threadcoreknowledge.uncaughtexception.MyUncaughtExceptionHandler uncaughtException
    警告: 线程异常,终止啦MyThread-3
    一月 06, 2021 8:26:41 下午 threadcoreknowledge.uncaughtexception.MyUncaughtExceptionHandler uncaughtException
    警告: 线程异常,终止啦MyThread-4
    捕获器1捕获了异常MyThread-4异常
    
    

猜你喜欢

转载自blog.csdn.net/weixin_44863537/article/details/112297153