Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

CompletableFuture.supplyAsync()

Запускает вычисление асинхронно и возвращает `CompletableFuture`.

Доступно с: Java 8

Синтаксис

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

Параметры

ПараметрТипОписание
supplierSupplier<U>Код, вычисляющий результат.
executorExecutorНеобязательный пул; по умолчанию общий `ForkJoinPool`.

Возвращаемое значение

CompletableFuture<U>Будущий результат, к которому можно прицепить следующие шаги.

Примеры

Асинхронная задача и ожидание результата:

void main() {
    CompletableFuture<String> page = CompletableFuture.supplyAsync(() -> {
        try { Thread.sleep(200); } catch (InterruptedException e) { throw new RuntimeException(e); }
        return "<html>...</html>";
    });
    IO.println("loading...");
    IO.println(page.join().length() + " chars");
}

Результат:

loading...
16 chars

Примечания

Без второго аргумента задача выполняется в общем пуле ForkJoinPool.commonPool(). Для задач с ожиданием (сеть, файлы) передайте свой пул, например Executors.newVirtualThreadPerTaskExecutor(). Для задачи без результата есть runAsync().

См. также

  • CompletableFuture.thenApply() — Добавляет шаг, который преобразует результат, когда тот будет готов.
  • CompletableFuture.join() — Ждёт результат `CompletableFuture`; ошибки приходят как непроверяемые исключения.
  • Supplier — Поставщик: функция без аргументов, которая возвращает значение.
  • Future.get() — Ждёт завершения задачи и возвращает её результат.

Вопросы и ответы по теме

В учебнике

  • CompletableFuture — Асинхронные цепочки в Java — CompletableFuture.supplyAsync, thenApply, thenAccept, thenCombine, allOf, обработка ошибок через exceptionally и join.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.