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

Метод completeExceptionally

Метод completeExceptionally завершает CompletableFuture с ошибкой. Если футура ещё не завершена, она переводится в состояние завершения с указанным исключением. Все зависимые вычисления и обработчики, которые будут вызваны после этого, получат это исключение. В параметр мы передаём объект исключения, которое должно быть установлено как причина завершения. Метод возвращает true, если футура была успешно завершена этим вызовом, и false, если она уже была завершена ранее.

Если футура уже завершена (успешно или с ошибкой), вызов метода не изменяет её состояние.

Синтаксис

boolean completeExceptionally(Throwable ex)

Пример

Давайте создадим незавершённую футуру и завершим её исключением:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = new CompletableFuture<>(); boolean res = future.completeExceptionally(new RuntimeException("Something went wrong")); System.out.println(res); System.out.println(future.isCompletedExceptionally()); } }

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

true true

Пример

Давайте попробуем завершить футуру исключением повторно. Второй вызов вернёт false, так как футура уже завершена:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = new CompletableFuture<>(); boolean first = future.completeExceptionally(new RuntimeException("Error 1")); boolean second = future.completeExceptionally(new RuntimeException("Error 2")); System.out.println(first); System.out.println(second); } }

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

true false

Пример

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

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = new CompletableFuture<>(); future.completeExceptionally(new RuntimeException("Something went wrong")); CompletableFuture<String> handled = future.exceptionally(ex -> "Recovered: " + ex.getMessage()); System.out.println(handled.join()); } }

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

"Recovered: Something went wrong"

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

  • класс CompletableFuture,
    который представляет асинхронное вычисление
  • метод complete,
    который завершает футуру значением
  • метод exceptionally,
    который обрабатывает исключение
  • метод handle,
    который обрабатывает результат и исключение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить