Метод runAsync
Метод runAsync класса CompletableFuture
запускает асинхронную задачу, которая не возвращает
результата. В первый параметр мы передаем объект
Runnable - задачу, которая будет выполнена
в отдельном потоке. Вторым необязательным параметром
можно передать объект Executor - пул потоков,
в котором будет выполняться задача. Если исполнитель
не указан, используется пул потоков по умолчанию
(ForkJoinPool.commonPool).
Метод возвращает объект CompletableFuture<Void>,
который завершается, когда задача выполнена.
Так как задача не возвращает значения, тип результата -
Void.
Синтаксис
CompletableFuture.runAsync(Runnable runnable)
CompletableFuture.runAsync(Runnable runnable, Executor executor)
Пример
Давайте запустим простую асинхронную задачу, которая выводит сообщение в консоль:
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");
});
future.join();
System.out.println("Done");
}
}
Результат выполнения кода:
"Task is running"
"Done"
Пример
Давайте передадим собственный пул потоков через второй параметр метода:
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<Void> future = CompletableFuture.runAsync(() -> {
System.out.println("Running in custom pool");
}, executor);
future.join();
executor.shutdown();
System.out.println("Done");
}
}
Результат выполнения кода:
"Running in custom pool"
"Done"
Пример
Давайте запустим несколько асинхронных задач и дождемся их завершения:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<Void> f1 = CompletableFuture.runAsync(() -> {
System.out.println("Task 1");
});
CompletableFuture<Void> f2 = CompletableFuture.runAsync(() -> {
System.out.println("Task 2");
});
CompletableFuture.allOf(f1, f2).join();
System.out.println("All tasks finished");
}
}
Результат выполнения кода:
"Task 1"
"Task 2"
"All tasks finished"
Смотрите также
-
метод
supplyAsync,
который запускает задачу с возвращаемым результатом -
метод
thenRun,
который выполняет действие после завершения -
метод
allOf,
который ожидает завершения всех задач -
класс
CompletableFuture,
который представляет асинхронные вычисления