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.