gpt4 book ai didi

java - ThreadPoolExecutor中如何实现提交方法吞下异常,但执行-不

转载 作者:行者123 更新时间:2023-12-01 08:49:15 27 4
gpt4 key购买 nike

众所周知,ThreadPoolExecutor 有 2 种方法来推送任务:

提交并执行。

据我了解 - 主要区别如下:

提交返回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;
}

但是我在代码中找不到检测我们是否应该吞咽异常的地方。

请帮忙在代码中找到这个逻辑。

最佳答案

您的任务是一个FutureTask

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

try {
result = c.call();
ran = true;
} catch (Throwable ex) {
result = null;
ran = false;
setException(ex);
}

你会看到所有Throwable都在这里被吞掉了。

关于java - ThreadPoolExecutor中如何实现提交方法吞下异常,但执行-不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com