В чем разница между
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 ты описываешь, что должно произойти, когда результат появится.👉 Java Portal
