Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCfInr 181 of 322 menu
◀ ▶

CompletableFuture в Java

Страница каталога может одновременно запрашивать цены, остатки и отзывы у разных сервисов. Пока один ответ идёт по сети, процессор не обязан простаивать: задачу можно отдать другому потоку, а в основном коде описать, что делать, когда данные придут.

Класс CompletableFuture из java.util.concurrent представляет результат, который появится позже. Это развитие старого Future: к нему добавили запуск без своего ExecutorService, цепочки колбэков и явную обработку сбоев. Тип параметра T - то, что вернёт задача; для работы без значения используют CompletableFuture<Void>.

В Java 27 API остаётся частью стандартной библиотеки и хорошо сочетается с лямбдами и потоками из раздела о Thread. Низкоуровневый поток вы создаёте сами; здесь же описываете сценарий: запустить, преобразовать, объединить, дождаться.

Уже завершённый результат можно получить фабрикой completedFuture, а асинхронный расчёт стартует отдельными методами, которые разберём в следующем уроке:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> ready = CompletableFuture.completedFuture("ok"); System.out.println(ready.join()); CompletableFuture<String> later = CompletableFuture.supplyAsync(() -> { return "from pool"; }); System.out.println(later.join()); } }

Первый объект готов сразу, второй считается в общем пуле потоков. Метод join блокирует текущий поток до готовности; позже посмотрим и неблокирующие варианты.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить