Что такое 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