zoukankan      html  css  js  c++  java
  • java并发--捕获线程异常

    由于线程的本质特性,使得不能捕获从线程中逃逸的异常。一旦异常逃出任务的main()方法,就会传播到控制台中,main方法中try-catch也是没有作用的。

    这就使用到Thread.UncaughtExcuptionHandler接口,这个接口允许没个Thread对象附着一个异常处理器。

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadFactory;
    
    public class ExceptionDemo  {
        class myRunnalbe implements Runnable{
    
            @Override
            public void run() {
                System.out.println("thread:" + Thread.currentThread());
                throw new RuntimeException();// 抛出一个异常
            }
            
        }
        
        class myUncaughtExcuptionHandler implements Thread.UncaughtExceptionHandler {
            /**
             * 处理异常
             */
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println("Exception::" + e);
            }
        }
        /**
         * 线程工厂
         * @author Administrator
         *
         */
        class myThreadFactory implements ThreadFactory {
    
            @Override
            public Thread newThread(Runnable r) {
                Thread t = new Thread(r);
                t.setUncaughtExceptionHandler(new myUncaughtExcuptionHandler());// 设置一个异常处理器
                System.out.println("eh::" + t.getUncaughtExceptionHandler());
                return t;
            }
        }
        
        public static void main(String[] args) {
            ExceptionDemo demo = new ExceptionDemo();
            ExecutorService executor = Executors.newCachedThreadPool(demo.new myThreadFactory());
            executor.execute(demo.new myRunnalbe());
        }
    }

    这就是可以抓获异常。

  • 相关阅读:
    类加载器
    会话机制
    数据库读写分离
    代码优化工具
    杀毒软件框架设计
    树状结构
    spring依赖注入
    never stop believe yourself
    利用callKit实现电话防骚扰
    mac上使用使用rz,sz命令
  • 原文地址:https://www.cnblogs.com/a-bird/p/3610391.html
Copyright © 2011-2022 走看看