CompletableFuture.supplyAsync()
Запускает вычисление асинхронно и возвращает `CompletableFuture`.
Доступно с: Java 8
Синтаксис
static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| supplier | Supplier<U> | Код, вычисляющий результат. |
| executor | Executor | Необязательный пул; по умолчанию общий `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.