java concurrent Будущая задача, возвращающая ноль в случае какого-либо исключения и не распространяющая его - PullRequest
2 голосов
/ 06 июля 2011

Я новичок в пакете java.util.concurrent и написал простой метод, который выбирает несколько строк из БД. Я убедился, что мой вызов БД выдает исключение для его обработки. Но я не вижу исключения, распространяющегося обратно ко мне. Вместо этого вызов моего метода возвращает ноль.

Может ли кто-нибудь помочь мне в этом случае? Вот мой пример вызова метода

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

1 Ответ

7 голосов
/ 06 июля 2011

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
}
...