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

Метод completeOnTimeout

Метод completeOnTimeout завершает CompletableFuture указанным значением, если исходный CompletableFuture не завершился в течение заданного времени ожидания. В первом параметре мы передаем значение, которым нужно завершить CompletableFuture, во втором - время ожидания, в третьем - единицу измерения времени. Метод возвращает новый CompletableFuture, который завершится либо исходным результатом, либо переданным значением по истечении таймаута.

Синтаксис

CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)

Пример

Давайте создадим CompletableFuture, который завершится значением по умолчанию, если не получит результат за 1 секунду:

import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { CompletableFuture<String> future = new CompletableFuture<>(); CompletableFuture<String> res = future.completeOnTimeout("default", 1, TimeUnit.SECONDS); System.out.println(res.join()); } }

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

"default"

Пример

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

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

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

"abcde"

Пример

Давайте используем completeOnTimeout вместе с supplyAsync, где задача выполняется дольше таймаута:

import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return "abcde"; }); CompletableFuture<String> res = future.completeOnTimeout("12345", 1, TimeUnit.SECONDS); System.out.println(res.join()); } }

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

"12345"

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

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