РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1067 of 1163 menu

Класс CompletableFuture

Класс CompletableFuture представляет собой асинхронную задачу, которая может завершиться успешно или с ошибкой. Он реализует интерфейс Future и интерфейс CompletionStage, что позволяет строить цепочки асинхронных вычислений, комбинировать несколько задач, обрабатывать исключения и получать результат без блокировки потока. Экземпляр класса можно создать через статические методы supplyAsync, runAsync, completedFuture, а также через конструктор без параметров.

Синтаксис

CompletableFuture<T> future = new CompletableFuture<>(); CompletableFuture<T> future = CompletableFuture.supplyAsync(Supplier<T>); CompletableFuture<Void> future = CompletableFuture.runAsync(Runnable); CompletableFuture<T> future = CompletableFuture.completedFuture(T value);

Пример

Давайте создадим асинхронную задачу, которая возвращает строку, и получим её результат через метод join:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "abcde"); String res = future.join(); System.out.println(res); } }

Результат выполнения кода:

"abcde"

Пример

Давайте создадим цепочку вычислений через метод thenApply, который преобразует результат предыдущей задачи:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture .supplyAsync(() -> "abcde") .thenApply(str -> str.toUpperCase()); String res = future.join(); System.out.println(res); } }

Результат выполнения кода:

"ABCDE"

Пример

Давайте обработаем исключение через метод exceptionally, который вернёт запасное значение при ошибке:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture .supplyAsync(() -> { throw new RuntimeException("error"); }) .exceptionally(ex -> "default"); String res = future.join(); System.out.println(res); } }

Результат выполнения кода:

"default"

Пример

Давайте скомбинируем две асинхронные задачи через метод thenCombine и получим общий результат:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> first = CompletableFuture.supplyAsync(() -> "abcde"); CompletableFuture<String> second = CompletableFuture.supplyAsync(() -> "12345"); CompletableFuture<String> combined = first.thenCombine(second, (a, b) -> a + b); String res = combined.join(); System.out.println(res); } }

Результат выполнения кода:

"abcde12345"

Смотрите также

  • метод supplyAsync,
    который создаёт асинхронную задачу с результатом
  • метод thenApply,
    который преобразует результат задачи
  • метод exceptionally,
    который обрабатывает исключение задачи
  • метод allOf,
    который объединяет несколько задач в одну
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить