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

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

Метод get класса CompletableFuture блокирует текущий поток до тех пор, пока асинхронная операция не завершится, и возвращает полученный результат. Если операция завершилась с ошибкой, метод выбрасывает исключение ExecutionException, внутри которого находится исходная причина. Если текущий поток был прерван во время ожидания, выбрасывается InterruptedException. Параметров у метода нет в базовой версии, но существует перегрузка с таймаутом: в первый параметр мы передаём время ожидания, во второй - единицу измерения времени.

Синтаксис

completableFuture.get() completableFuture.get(timeout, unit)

Пример

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

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

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

"abcde"

Пример

Давайте получим результат асинхронного вычисления числа:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) throws Exception { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5 + 10); Integer res = future.get(); System.out.println(res); } }

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

15

Пример

Давайте посмотрим, что произойдёт, если асинхронная операция завершилась с ошибкой:

import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("failure"); }); try { String res = future.get(); System.out.println(res); } catch (ExecutionException e) { System.out.println(e.getCause().getMessage()); } catch (InterruptedException e) { System.out.println("interrupted"); } } }

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

"failure"

Пример

Давайте получим результат с ограничением по времени ожидания:

import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws Exception { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "12345"); String res = future.get(1, TimeUnit.SECONDS); System.out.println(res); } }

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

"12345"

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

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