Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCfAt 182 of 322 menu
◀ ▶

Асинхронный запуск задачи в Java

Два входа в асинхронный мир: вернуть значение или только выполнить действие. Первое покрывает supplyAsync с Supplier, второе runAsync с Runnable. Оба возвращают CompletableFuture, по которому можно продолжить цепочку.

Без второго аргумента задача уходит в ForkJoinPool.commonPool(). Для сетевых вызовов или блокирующего ввода-вывода лучше передать свой Executor, чтобы не забить общий пул:

import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { CompletableFuture<Integer> sum = CompletableFuture.supplyAsync(() -> 10 + 32); System.out.println(sum.join()); ExecutorService pool = Executors.newFixedThreadPool(2); CompletableFuture<Void> log = CompletableFuture.runAsync( () -> System.out.println("logged"), pool ); log.join(); pool.shutdown(); } }

supplyAsync подходит, когда нужен результат типа T. runAsync завершается null внутри Void; его берут для записи в журнал, отправки метрики, очистки ресурса.

Задачу можно описать и вручную через пустой CompletableFuture и методы complete или completeExceptionally, когда результат приходит из колбэка библиотеки. Для обычного кода на Java 27 чаще хватает supplyAsync и runAsync.

Запустите supplyAsync, который возвращает длину строки "catalog", и выведите join(). Затем runAsync с печатью "done" и дождитесь.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить