← Назад к вопросам

Что такое ExecutorService и как он работает?

2.0 Middle🔥 191 комментариев
#Многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

  1. Создание пула потоков: Executor создаёт и управляет фиксированным или динамическим набором рабочих потоков.

  2. Очередь задач: Задачи добавляются в очередь и выполняются доступными потоками.

  3. Асинхронное выполнение: Поток, отправивший задачу, не блокируется и может продолжить работу.

  4. 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.

Что такое ExecutorService и как он работает? | PrepBro