Что такое CompletableFuture
`CompletableFuture` представляет собой улучшение стандартного интерфейса `Future`, предоставляя более гибкие и мощные возможности для асинхронного программирования. Введённый в пакете `java.util.concurrent`, он позволяет более удобно работать с результатами асинхронных операций, объединять асинхронные вычисления последовательно или параллельно, реагировать на их завершение без блокировки потока и обрабатывать исключения.
Основные возможности:
1. Асинхронное выполнение задач: Можно использовать для асинхронного выполнения вычислений без необходимости явного создания потоков или использования пулов потоков.
2. Обработка результатов и исключений: Предоставляет методы для обработки результатов асинхронных операций и исключений, возникших во время их выполнения. Это делает код более чистым и понятным.
3. Комбинирование асинхронных задач: Позволяет объединять несколько асинхронных задач последовательно или параллельно, формируя цепочки вычислений или объединяя результаты.
4. Отсутствие блокировки: Методы `get()` и `join()` позволяют дождаться завершения асинхронной операции, но `CompletableFuture` также предлагает неблокирующие методы для реакции на завершение операций, такие как `thenApply()`, `thenAccept()`, `thenCompose()` и `whenComplete()`.
Пример:
CompletableFuture.supplyAsync(() -> {
// Имитация длительной операции
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
return "Результат асинхронной операции";
})
.thenApply(result -> {
// Преобразование результата
return result.toUpperCase();
})
.thenAccept(result -> {
// Обработка результата
System.out.println(result);
})
.exceptionally(ex -> {
// Обработка исключения
System.out.println("Произошла ошибка: " + ex.getMessage());
return null;
});
В этом примере `supplyAsync()` используется для асинхронного выполнения задачи, `thenApply()` преобразует результат, `thenAccept()` обрабатывает его, а `exceptionally()` обрабатывает возможные исключения.
`CompletableFuture` предоставляет мощный и гибкий инструментарий для асинхронного программирования, позволяя эффективно управлять асинхронными операциями и их результатами. Это делает `CompletableFuture` предпочтительным выбором для современных асинхронных и реактивных приложений.
March 7, 2024, easyoffer