CompletableFuture — как выполнять задачи асинхронно в Java?

Если Thread позволяет запустить код в отдельном потоке, то CompletableFuture позволяет удобно строить цепочки асинхронных операций.

Например:

CompletableFuture
.supplyAsync(() -> getUser())
.thenApply(user -> user.getName())
.thenAccept(System.out::println);

Здесь сначала асинхронно получаем пользователя, затем преобразуем результат и передаём его следующему обработчику.

Можно обрабатывать ошибки:

CompletableFuture
.supplyAsync(() -> getUser())
.thenApply(User::getName)
.exceptionally(ex -> "Unknown");

Можно запустить несколько независимых задач параллельно:

var user = getUserAsync();
var orders = getOrdersAsync();

user.thenCombine(orders, (u, o) -> new UserOrders(u, o));

CompletableFuture также позволяет дождаться выполнения нескольких задач:

CompletableFuture.allOf(user, orders).join();

Важно: CompletableFuture — это не отдельный механизм создания потоков. По умолчанию supplyAsync() использует общий ForkJoinPool. При необходимости можно передать собственный Executor.

Главная идея: CompletableFuture удобен, когда нужно строить сложные цепочки асинхронных операций, комбинировать результаты и централизованно обрабатывать ошибки.
Просмотры: 13
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти