У меня есть метод, который возвращает List
фьючерсы
List<Future<O>> futures = getFutures();
Теперь я хочу дождаться, пока либо все фьючерсы не будут успешно обработаны, либо какая-либо из задач, вывод которых возвращается будущим, выдает исключение. Даже если одна задача выдает исключение, нет смысла ждать другого будущего.
Простым подходом было бы
wait() {
For(Future f : futures) {
try {
f.get();
} catch(Exception e) {
//TODO catch specific exception
// this future threw exception , means somone could not do its task
return;
}
}
}
Но проблема здесь в том, что если, например, 4-е будущее выдает исключение, я буду без необходимости ждать, пока будут доступны первые 3 фьючерса.
Как это решить? Будет ли отсчитывать помощь защелки? Я не могу использовать Future, isDone
потому что в java-документе написано
boolean isDone()
Returns true if this task completed. Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return true.