Что такое ExecutorService и как он работает?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
ExecutorService в Java
ExecutorService — это интерфейс из пакета java.util.concurrent, который предоставляет управляемый пул потоков для асинхронного выполнения задач. Это высокоуровневая абстракция для работы с многопоточностью, избегающая необходимости вручную создавать и управлять отдельными потоками.
Основные компоненты
ExecutorService наследует интерфейс Executor и добавляет методы для управления жизненным циклом пула потоков:
ExecutorService executor = Executors.newFixedThreadPool(10);
// Отправка Runnable задачи
executor.execute(() -> System.out.println("Задача выполняется"));
// Отправка Callable задачи (возвращает результат)
Future<String> future = executor.submit(() -> "Результат");
// Получение результата (блокирующий вызов)
String result = future.get();
Как работает ExecutorService
-
Создание пула потоков: Executor создаёт и управляет фиксированным или динамическим набором рабочих потоков.
-
Очередь задач: Задачи добавляются в очередь и выполняются доступными потоками.
-
Асинхронное выполнение: Поток, отправивший задачу, не блокируется и может продолжить работу.
-
Future для результатов: Метод submit() возвращает Future, позволяющий получить результат или исключение.
Типы пулов потоков
ExecutorService fixed = Executors.newFixedThreadPool(10);
ExecutorService cached = Executors.newCachedThreadPool();
ExecutorService single = Executors.newSingleThreadExecutor();
ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(5);
Жизненный цикл
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 20; i++) {
executor.submit(() -> processTask());
}
executor.shutdown();
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
executor.shutdownNow();
}
Работа с Future
Future<Integer> future = executor.submit(() -> 42);
if (future.isDone()) {
System.out.println("Готово");
}
try {
Integer result = future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.cancel(true);
}
ExecutorService — это foundation для построения масштабируемых многопоточных приложений на Java.