tgoop.com/Java_Iibrary/1738
Last Update:
Ты на собеседовании на бэкенд-разработчика. Интервьюер спрашивает:
В чем разница между Future и CompletableFuture в Java?
Обычно на это отвечают размыто. Давай разложим по полочкам.
Что такое Future
• Появился в Java 5 вместе с Executor framework.
• Представляет результат асинхронного вычисления.
• Обычно ты отдаешь Callable в ExecutorService, который возвращает Future<T>.
С ним можно:
• вызвать get() → блокирует поток, пока задача не завершится
• вызвать isDone() → проверить, закончилась ли задача
• вызвать cancel() → попытаться отменить выполнение
И на этом все. Future дает контроль над ожиданием, но никак не управляет тем, что делать, когда результат готов.
Что добавляет CompletableFuture
• Появился в Java 8, реализует Future и CompletionStage.
• Все еще является Future (можно блокироваться, если хочется), но гораздо функциональнее.
• Поддерживает неблокирующие коллбеки (thenApply, thenAccept, thenRun).
• Позволяет комбинировать задачи (thenCombine, allOf, anyOf).
• Умеет завершаться вручную через complete(), чего у Future нет.
• Даёт более гибкую обработку ошибок (exceptionally, handle).
Главная разница
С Future ты просто ждешь результат. С CompletableFuture ты описываешь, что должно произойти, когда результат появится.

