gpt4 book ai didi

java并发Future任务在发生任何异常时返回null并且不传播它

转载 作者:行者123 更新时间:2023-12-03 02:05:51 28 4
gpt4 key购买 nike

我是 java.util.concurrent 包的新手,编写了一个简单的方法,可以从数据库中获取一些行。我确保我的数据库调用会抛出异常来处理它。但我没有看到异常传播回给我。相反,对我的方法的调用返回 null。

在这种情况下有人可以帮助我吗?这是我的示例方法调用

private FutureTask<List<ConditionFact>> getConditionFacts(final Member member) throws Exception {
FutureTask<List<ConditionFact>> task = new FutureTask<List<ConditionFact>>(new Callable<List<ConditionFact>>() {
public List<ConditionFact> call() throws Exception {
return saeFactDao.findConditionFactsByMember(member);
}
});
taskExecutor.execute(task);
return task;
}

我用谷歌搜索并找到了一些与之相关的页面。但没有看到任何具体的解决方案。请高手帮忙......

taskExecutor是org.springframework.core.task.TaskExecutor的对象

最佳答案

FutureTask 将在新线程中执行,如果发生异常,会将其存储在实例字段中。只有当您询问执行结果时,您才会得到异常,该异常包含在 ExecutionException 中:

FutureTask<List<ConditionFact>> task = getConditionFacts(member);
// wait for the task to complete and get the result:
try {
List<ConditionFact> conditionFacts = task.get();
}
catch (ExecutionException e) {
// an exception occurred.
Throwable cause = e.getCause(); // cause is the original exception thrown by the DAO
}

关于java并发Future任务在发生任何异常时返回null并且不传播它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601189/

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