Я написал много вызовов Async Future Task Call один под другим в моей java-программе. Предоставление одного образца ниже
FutureTask<List<ConditionFact>> x = getConditionFacts(final Member member);
FutureTask<List<RiskFact>> x = getRiskFacts(final Member member);
FutureTask<List<SAEFact>> x = getSAEFacts(final Member member);
Теперь предположим, что я намеренно создал исключение во втором вызове выше и вложил все 3 вызова get () в один блок try / catch. Я не вижу исключения для блока catch, и моя Java-программа просто стоит на месте. Все 3 вызова метода происходят одновременно.
try {
FutureTask<List<ConditionFact>> task = getConditionFacts(member);
// wait for the task to complete and get the result:
List<ConditionFact> conditionFacts = task.get();
FutureTask<List<ConditionFact>> task = getRiskFacts(member);
// wait for the task to complete and get the result:
List<RiskFact> conditionFacts = task.get();
}
catch (ExecutionException e) {
// an exception occurred.
Throwable cause = e.getCause(); // cause is the original exception thrown by the DAO
}
Но если я заключу каждый из get () в отдельные блоки try catch, я смогу их перехватить. Зачем? Также в тот момент, когда я начинаю заключать каждый метод get () в блоки try catch, я теряю многопоточность. Вызовы метода происходят один за другим как закодировано
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
}
FutureTask<List<ConditionFact>> task = getRiskFacts(member);
// wait for the task to complete and get the result:
try {
List<RiskFact> conditionFacts = task.get();
}
catch (ExecutionException e) {
// an exception occurred.
Throwable cause = e.getCause(); // cause is the original exception thrown by the DAO
}
когда я могу поймать исключение, я теряю многопоточность, а когда я могу порождать многопоточность, я теряю исключение.
Любые идеи о том, как обрабатывать исключения по отдельности и одновременно достигать многопоточности