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

Метод thenRun

Метод thenRun класса CompletableFuture запускает переданное действие после того, как исходная асинхронная задача завершится. Особенность этого метода в том, что он не получает результат предыдущей задачи в качестве параметра и не возвращает новое значение. В параметр мы передаём объект Runnable, который содержит код для выполнения. Метод возвращает новый объект CompletableFuture<Void>, который завершится после выполнения переданного действия.

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

Синтаксис

CompletableFuture<Void> thenRun(Runnable action)

Пример

Давайте создадим асинхронную задачу через runAsync и повесим на неё действие через thenRun:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("Task is running"); }); CompletableFuture<Void> res = future.thenRun(() -> { System.out.println("Action after task"); }); res.join(); } }

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

"Task is running" "Action after task"

Пример

Давайте используем thenRun после задачи, которая возвращает результат через supplyAsync. Результат при этом в действии недоступен:

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

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

"Done"

Пример

Давайте посмотрим, что произойдёт, если исходная задача завершится с исключением. Действие в thenRun выполнено не будет:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { throw new RuntimeException("error"); }); CompletableFuture<Void> res = future.thenRun(() -> { System.out.println("This will not be printed"); }); try { res.join(); } catch (Exception e) { System.out.println("Exception caught"); } } }

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

"Exception caught"

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

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