ExecutorService
Сервис, который выполняет задачи в пуле потоков.
Доступно с: Java 1.5
Синтаксис
public interface ExecutorService extends Executor, AutoCloseableПримеры
Задачи в пуле и сбор результатов:
void main() throws Exception {
try (ExecutorService pool = Executors.newFixedThreadPool(3)) {
List<Future<Integer>> results = new ArrayList<>();
for (int n = 1; n <= 5; n++) {
int x = n;
results.add(pool.submit(() -> x * x));
}
for (Future<Integer> f : results) {
IO.print(f.get() + " ");
}
IO.println("");
}
}Результат:
1 4 9 16 25Примечания
Пул отделяет «что сделать» (задача) от «где выполнить» (потоки). Создаётся через фабрики Executors. С Java 19 сервис реализует AutoCloseable, и его удобно открывать в try-with-resources: при выходе из блока он дождётся всех задач. Без этого пул нужно закрыть через shutdown(), иначе программа может не завершиться.
См. также
- Executors.newFixedThreadPool() — Создаёт пул из заданного числа потоков.
- ExecutorService.submit() — Отправляет задачу в пул и сразу возвращает `Future` для её результата.
- ExecutorService.close() — Закрывает пул и ждёт завершения всех задач; вызывается автоматически в try-with-resources.
- Future.get() — Ждёт завершения задачи и возвращает её результат.
Вопросы и ответы по теме
В учебнике
- Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.