Я написал много асинхронных вызовов будущих задач один под другим в своей 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
}
когда я могу поймать исключение, я теряю многопоточность, а когда я могу создавать несколько потоков, я теряю исключение.
Любые идеи, как обрабатывать исключения по отдельности и одновременно достигать многопоточности