Класс Executors
Класс Executors - это утилитарный класс из пакета
java.util.concurrent, который предоставляет набор
фабричных методов для создания объектов ExecutorService,
ScheduledExecutorService и других исполнителей.
Он упрощает создание пулов потоков, избавляя разработчика
от необходимости вручную конфигурировать параметры
ThreadPoolExecutor. Класс содержит только статические
методы и не может быть инстанцирован.
Основные методы класса Executors позволяют создать
пул потоков фиксированного размера, кэшируемый пул,
исполнитель с одним потоком, а также планировщик задач.
Каждый метод возвращает объект, реализующий интерфейс
ExecutorService или его наследника.
Синтаксис
Executors.newFixedThreadPool(int nThreads)
Executors.newCachedThreadPool()
Executors.newSingleThreadExecutor()
Executors.newScheduledThreadPool(int corePoolSize)
Executors.newVirtualThreadPerTaskExecutor()
Пример
Давайте создадим пул из трёх потоков и выполним в нём несколько задач:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 5; i++)
{
final int taskId = i;
executor.submit(() -> {
System.out.println("Task " + taskId + " is running");
});
}
executor.shutdown();
}
}
Результат выполнения кода:
"Task 1 is running"
"Task 2 is running"
"Task 3 is running"
"Task 4 is running"
"Task 5 is running"
Пример
Давайте создадим исполнитель с одним потоком и получим результат выполнения задачи:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main
{
public static void main(String[] args) throws Exception
{
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> {
return 12345;
});
Integer res = future.get();
System.out.println(res);
executor.shutdown();
}
}
Результат выполнения кода:
12345
Пример
Давайте создадим кэшируемый пул потоков и выполним в нём несколько задач:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(() -> {
System.out.println("Task A");
});
executor.execute(() -> {
System.out.println("Task B");
});
executor.shutdown();
}
}
Результат выполнения кода:
"Task A"
"Task B"
Смотрите также
-
интерфейс
ExecutorService,
который представляет пул потоков -
метод
submit,
который отправляет задачу на выполнение -
метод
shutdown,
который завершает работу исполнителя -
метод
newFixedThreadPool,
который создаёт пул фиксированного размера