Executors.newFixedThreadPool()
Создаёт пул из заданного числа потоков.
Доступно с: Java 1.5
Синтаксис
public static ExecutorService newFixedThreadPool(int nThreads)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| nThreads | int | Количество потоков в пуле. |
Возвращаемое значение
ExecutorServiceПул с фиксированным числом потоков.
Примеры
Пул по числу ядер для вычислений:
void main() throws Exception {
int cores = Runtime.getRuntime().availableProcessors();
try (var pool = Executors.newFixedThreadPool(cores)) {
Future<Long> sum = pool.submit(() -> LongStream.rangeClosed(1, 1_000_000).sum());
IO.println(sum.get());
}
}Результат:
500000500000Примечания
Если задач больше, чем потоков, лишние ждут в очереди. Для вычислительных задач число потоков обычно равно числу ядер (availableProcessors()). Для задач, которые в основном ждут (сеть, файлы), удобнее newVirtualThreadPerTaskExecutor().
См. также
- ExecutorService — Сервис, который выполняет задачи в пуле потоков.
- Executors.newVirtualThreadPerTaskExecutor() — Создаёт сервис, который запускает каждую задачу в отдельном виртуальном потоке.
- ExecutorService.submit() — Отправляет задачу в пул и сразу возвращает `Future` для её результата.
Вопросы и ответы по теме
В учебнике
- Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.