2

我是 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;
    }

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

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

4

1 回答 1

9

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
}
于 2011-07-06T18:39:28.273 回答