Что проверяет вопрос про CompletableFuture.allOf()
allOf() возвращает CompletableFuture, а не список результатов. Вопрос проверяет, понимаете ли вы, что allOf синхронизирует момент завершения задач, но не агрегирует их значения — результаты нужно собирать отдельно.
Частая ошибка — ждать, что thenApply на allOf сразу отдаст готовый список значений. На деле внутри нужно пройти по исходным future и вызвать join() на каждом: к моменту завершения allOf все они уже выполнены, join() не заблокирует поток.
Если один из future упал с исключением, allOf завершится exceptionally — но остальные задачи продолжат выполняться независимо. join() на упавшем future бросит CompletionException, и без отдельной обработки результаты остальных потеряются вместе с ним.
List> futures = fetchAllAsync();
CompletableFuture all = CompletableFuture.allOf( futures.toArray(new CompletableFuture[0]) );
List results = all.thenApply(v -> futures.stream() .map(CompletableFuture::join) .collect(Collectors.toList()) ).join();
Что спросят следом: как получить результаты остальных задач, если одна из них упала. Ответ — обрабатывать каждый future через exceptionally() или handle() до объединения в allOf, чтобы сбой одной задачи не сносил весь batch.
allOf — про момент завершения, а не про сбор данных.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки