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

Метод complete класса CompletableFuture

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

Метод особенно полезен, когда результат вычисляется не асинхронно, а по событию: например, при получении ответа от внешнего источника или при завершении другой задачи. С его помощью можно вручную «закрыть» будущее и тем самым разблокировать все зависимые от него вычисления.

Синтаксис

boolean complete(T value)

Пример

Давайте создадим незавершённый CompletableFuture и завершим его строкой "abcde":

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

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

true "abcde"

Пример

Если CompletableFuture уже завершён, повторный вызов complete вернёт false и не изменит значение:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = new CompletableFuture<>(); boolean first = future.complete("abcde"); boolean second = future.complete("12345"); System.out.println(first); System.out.println(second); System.out.println(future.join()); } }

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

true false "abcde"

Пример

Метод complete можно использовать для ручного завершения будущего из другого потока. Давайте завершим CompletableFuture значением 12345 и получим его через thenApply:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<Integer> future = new CompletableFuture<>(); CompletableFuture<Integer> res = future.thenApply(n -> n * 2); future.complete(12345); System.out.println(res.join()); } }

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

24690

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

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