美文网首页线程
ExecutorService之submit与execute

ExecutorService之submit与execute

作者: 田真的架构人生 | 来源:发表于2017-08-16 21:39 被阅读968次

    ExecutorService的submit与execute方法都能执行任务,但在使用过程,发现其对待run方法抛出的异常处理方式不一样。
    两者执行任务最后都会通过Executor的execute方法来执行,但对于submit,会将runnable物件包装成FutureTask,其run方法会捕捉被包装的Runnable Object的run方法抛出的Throwable异常,待submit方法所返回的的Future Object调用get方法时,将执行任务时捕获的Throwable Object包装成java.util.concurrent.ExecutionException来抛出。

    而对于execute方法,则会直接抛出异常,该异常不能被捕获,想要在出现异常时做些处理,可以实现Thread.UncaughtExceptionHandler接口:

    class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{
     public void uncaughtException(Thread t, Throwable e) {
     System.out.println(\"caught \"+e);
     }
    }
    
    class HandlerThreadFactory implements ThreadFactory{
     public Thread newThread(Runnable r) {
     Thread t=new Thread(r);
     t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
     return t;
     }
    }
    
    ExecutorService exec=Executors.newCachedThreadPool(new HandlerThreadFactory())
    

    相关文章

      网友评论

        本文标题:ExecutorService之submit与execute

        本文链接:https://www.haomeiwen.com/subject/ahywrxtx.html