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

Метод join

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

Метод join удобно использовать в тех случаях, когда не хочется обрабатывать проверяемое исключение, как это требуется при вызове метода get. Однако стоит помнить, что вызов join блокирует поток, поэтому его не рекомендуется использовать внутри асинхронных цепочек.

Синтаксис

completableFuture.join()

Пример

Давайте создадим асинхронную задачу, которая возвращает строку, и дождёмся её результата с помощью метода 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"

Пример

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

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

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

5

Пример

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

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

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

"error"

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

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