众所周知,ThreadPoolExecutor有两种推送任务的方法:
提交并执行。
据我所知,主要区别有以下几点:
Submit返回Future,如果我们可以观察到调用后任务中发生的异常
future.get();但如果异常发生在作为提交推送的任务中-我们将在控制台中看到此异常(当然,如果此异常不会显式捕获)
我试图调查ThreadPoolExecutor代码,并找出这是如何实现的。
我注意到的是,submit方法在内部使用了execute方法:
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}但我在代码中找不到检测我们应该接受异常的地方-或者不是。
请帮助在代码中找到此逻辑。
发布于 2017-02-27 22:29:06
您的task是一个FutureTask。
如果您查看run方法的源代码(grepcode):
try {
result = c.call();
ran = true;
} catch (Throwable ex) {
result = null;
ran = false;
setException(ex);
}你可以看到所有的Throwable都在这里被吞没了。
https://stackoverflow.com/questions/42487718
复制相似问题