首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ThreadPoolExecutor中实现submit方法吞噬异常,但执行-not

如何在ThreadPoolExecutor中实现submit方法吞噬异常,但执行-not
EN

Stack Overflow用户
提问于 2017-02-27 22:04:28
回答 1查看 138关注 0票数 0

众所周知,ThreadPoolExecutor有两种推送任务的方法:

提交并执行。

据我所知,主要区别有以下几点:

Submit返回Future,如果我们可以观察到调用后任务中发生的异常

代码语言:javascript
复制
future.get();

但如果异常发生在作为提交推送的任务中-我们将在控制台中看到此异常(当然,如果此异常不会显式捕获)

我试图调查ThreadPoolExecutor代码,并找出这是如何实现的。

我注意到的是,submit方法在内部使用了execute方法:

代码语言:javascript
复制
public Future<?> submit(Runnable task) {
    if (task == null) throw new NullPointerException();
    RunnableFuture<Void> ftask = newTaskFor(task, null);
    execute(ftask);
    return ftask;
}

但我在代码中找不到检测我们应该接受异常的地方-或者不是。

请帮助在代码中找到此逻辑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 22:29:06

您的task是一个FutureTask

如果您查看run方法的源代码(grepcode):

代码语言:javascript
复制
try {
    result = c.call();
    ran = true;
} catch (Throwable ex) {
    result = null;
    ran = false;
    setException(ex);
}

你可以看到所有的Throwable都在这里被吞没了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42487718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档