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

Метод supplyAsync

Метод supplyAsync класса CompletableFuture запускает асинхронную задачу, которая возвращает некоторый результат. В отличие от метода runAsync, который ничего не возвращает, метод supplyAsync принимает на вход функциональный интерфейс Supplier и возвращает CompletableFuture с результатом вычисления. Задача выполняется в отдельном потоке из пула ForkJoinPool.commonPool. Первым параметром метод принимает поставщика результата, вторым (необязательным) - исполнителя Executor, в пуле которого будет выполнена задача.

Синтаксис

CompletableFuture.supplyAsync(Supplier<U> supplier) CompletableFuture.supplyAsync(Supplier<U> supplier, Executor executor)

Пример

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

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

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

"abcde"

Пример

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

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

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

10

Пример

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

import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(2); CompletableFuture<List<Integer>> future = CompletableFuture.supplyAsync(() -> { return List.of(1, 2, 3, 4, 5); }, executor); System.out.println(future.join()); executor.shutdown(); } }

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

[1, 2, 3, 4, 5]

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

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