Цепочки CompletableFuture
Объединение асинхронных операций в цепочки без блокировки с помощью CompletableFuture.
Сравнение кода
✕ Pre-Java 8
Future<String> future =
executor.submit(this::fetchData);
String data = future.get(); // blocks
String result = transform(data);
✓ Java 8+
CompletableFuture.supplyAsync(
this::fetchData
)
.thenApply(this::transform)
.thenAccept(IO::println);
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Цепочки
Объединение асинхронных шагов в читаемый конвейер.
Без блокировок
Ни один поток не ждёт результатов впустую.
Обработка ошибок
exceptionally() и handle() для надёжного восстановления после ошибок.
Старый подход
Блокирующий Future.get()
Современный подход
CompletableFuture
Начиная с JDK
8
Сложность
Средний
Поддержка JDK
Цепочки CompletableFuture
Доступно
Широко доступно с JDK 8 (март 2014)
Как это работает
CompletableFuture позволяет строить неблокирующие асинхронные конвейеры. Операции объединяются с помощью thenApply, thenCompose, thenAccept. Ошибки обрабатываются через exceptionally(). Несколько Future можно комбинировать с allOf/anyOf.
Связанная документация
Доказательство