Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
CompletableFuture
CompletableFuture это класс из пакета java.util.concurrent, введённый в Java 8, который предоставляет мощный механизм для работы с асинхронными вычислениями и обработкой результатов, которые могут быть получены в будущем.
Основные назначения
1. Асинхронное программирование CompletableFuture позволяет писать неблокирующий код, где результат вычисления может быть получен позже:
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// Выполняется в отдельном потоке
return "Результат из другого потока";
});
future.thenAccept(result -> System.out.println(result));
2. Цепочки операций (Composition) Можно связывать несколько асинхронных операций в цепочку, где результат одной становится входом для другой:
CompletableFuture.supplyAsync(() -> fetchUserData())
.thenApply(user -> enrichUserData(user))
.thenApply(enrichedUser -> formatForDisplay(enrichedUser))
.thenAccept(displayData -> System.out.println(displayData));
3. Комбинирование нескольких асинхронных задач Можно дождаться завершения нескольких независимых операций одновременно:
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
CompletableFuture<Integer> combined = future1.thenCombine(future2, (a, b) -> a + b);
System.out.println(combined.join()); // 30
4. Обработка исключений Предоставляет удобные методы для обработки ошибок в асинхронном коде:
CompletableFuture.supplyAsync(() -> divideByZero())
.exceptionally(ex -> {
System.out.println("Ошибка: " + ex.getMessage());
return 0;
});
5. Ручное завершение Можно вручную установить результат или исключение для CompletableFuture:
CompletableFuture<String> future = new CompletableFuture<>();
new Thread(() -> {
try {
Thread.sleep(1000);
future.complete("Готово!");
} catch (InterruptedException e) {
future.completeExceptionally(e);
}
}).start();
Преимущества перед старым Future
Классический Future из Java 5 имел ограничения: нельзя было объединять операции, обрабатывать ошибки или трансформировать результаты. CompletableFuture решает все эти проблемы благодаря функциональному подходу и методам вроде thenApply, thenCompose и других.
Практическое применение
- REST API клиенты: асинхронные HTTP запросы с обработкой результатов
- Микросервисы: параллельные вызовы разных сервисов
- Реактивное программирование: основа для построения реактивных потоков данных
- Кэширование: асинхронное заполнение кэша с обработкой результатов
CompletableFuture - это фундаментальный инструмент для написания эффективного, масштабируемого и отзывчивого Java кода в многопоточной среде.