我是java.util.concurrent包的新手,并编写了一个简单的方法,该方法可从DB中获取一些行。我确保我的数据库调用返回一个异常来处理它。但是我没有看到异常传播回我。相反,对我的方法的调用返回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;
}
我在Google上搜索并发现了一些页面。但是没有看到任何具体的解决方案。专家请帮忙。
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
}