Sobes.tech
Back to questions
Junior — Middle
75

Объясните отличия между классами Future и CompletableFuture в контексте асинхронного программирования Java.

Companies where asked
Демиус
ИннотехИннотех

Answer from AI

sobes.tech AI

В Java интерфейс Future представляет собой результат асинхронной операции, который можно получить позже. Он позволяет проверить, завершена ли задача, отменить её и получить результат, блокируясь при необходимости.

CompletableFuture — это расширение Future, появившееся в Java 8, которое поддерживает более богатый функционал для асинхронного программирования. Главное отличие:

  • Future не поддерживает цепочки и композицию асинхронных задач. Чтобы получить результат, нужно вызвать get(), который блокирует поток.
  • CompletableFuture позволяет создавать цепочки задач, обрабатывать результаты и ошибки без блокировки, используя методы вроде thenApply(), thenCompose(), exceptionally().
  • CompletableFuture поддерживает программное завершение (метод complete()), что невозможно в обычном Future.

Пример использования CompletableFuture:

CompletableFuture.supplyAsync(() -> "Hello")
    .thenApply(s -> s + " World")
    .thenAccept(System.out::println);

Таким образом, CompletableFuture — более мощный и гибкий инструмент для асинхронного программирования по сравнению с Future.