Что проверяет вопрос про thenCombine у CompletableFuture

thenCompose и thenCombine путают чаще всего. thenCompose — для последовательной зависимости: результат первого future нужен, чтобы запустить второй. thenCombine — для двух независимых future, которые выполняются параллельно и объединяются, когда оба готовы.

Вопрос проверяет, видите ли вы разницу между "один результат зависит от другого" и "два результата просто нужно свести в один". На собесе часто просят пример: получить цену и остаток на складе параллельно, а не один за другим.

CompletableFuture priceFuture = CompletableFuture.supplyAsync( this::fetchPrice);

CompletableFuture stockFuture = CompletableFuture.supplyAsync( this::fetchStock);

CompletableFuture result = priceFuture.thenCombine( stockFuture, (price, stock) -> "price=" + price

  • ", stock=" + stock);

Спросят следом: что будет, если fetchStock упадёт с исключением. Combining-функция не выполнится вообще, итоговый result завершится exceptionally — исключение из любого из двух future долетает наружу через ту же цепочку. И чем это отличается от allOf(), если объединять больше двух future одновременно.

thenCombine — это fork для двух независимых задач, а не продолжение одной цепочки.

Тренажёр: 600 вопросов, мок с таймером, план повторов

senior·base — что спрашивают на самом деле


В этом посте были ссылки, но мы их удалили по правилам Сетки