ExecutorService的submit与execute方法都能执行任务,但在使用过程,发现其对待run方法抛出的异常处理方式不一样。
两者执行任务最后都会通过Executor的execute方法来执行,但对于submit,会将runnable物件包装成FutureTask
而对于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())
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28912557/viewspace-762175/
,如需转载,请注明出处,否则将追究法律责任。