Проверяет знание API для работы с асинхронными результатами в Java.
Future (из java.util.concurrent) представляет результат асинхронной задачи, но предоставляет только методы get(), cancel() и isDone(). CompletableFuture расширяет Future, добавляя методы для составления цепочек (thenApply, thenCompose), обработки ошибок и управления выполнением (complete, completeExceptionally), что позволяет строить реактивные конвейеры.
Future:
Ограниченный API: блокирующий get(), нет возможности добавить коллбэк при завершении.
Использование: executor.submit(callable).
CompletableFuture:
Немедленный возврат: поддерживает неблокирующие операции.
Комбинирование: методы thenApply, thenAccept, thenCombine для последовательных и параллельных цепочек.
Обработка ошибок: exceptionally, handle.
Явное завершение: complete(value), completeExceptionally(ex).
Примеры:
CompletableFuture.supplyAsync(() -> fetchData())
.thenApply(data -> process(data))
.thenAccept(result -> System.out.println(result))
.exceptionally(ex -> { ex.printStackTrace(); return null; });Вывод:
Если нужна простая асинхронная задача — Future.
Для комплексных асинхронных конвейеров и неблокирующего кода — CompletableFuture.