Подтвердить что ты не робот

Будет ли ScheduledExecutorService создавать новые потоки по мере необходимости?

Я использую Executors.newScheduledThreadPool(), чтобы создать ScheduledExecutorService, указав количество потоков так:

int corePoolSize = 42;
ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize);

В соответствии с JavaDocs аргумент corePoolSize устанавливает

количество потоков для хранения в пуле, даже если они неактивны.

Означает ли это, что эта реализация ExecutorService может создавать более чем corePoolSize потоки по мере необходимости, аналогично кэшированному пулу потоков?

4b9b3361

Ответ 1

Нет. Правильный ответ: нет, ScheduledExecutorService не будет создавать новые потоки.

См. ответ здесь

Ответ 2

Означает ли это, что эта реализация ExecutorService может создавать потоки более чем corePoolSize при необходимости?

Да, это именно то, что это значит. Причиной существования corePoolSize является затраты на создание потоков. Если вы ожидаете, что будете запускать большое количество недолговечных задач в своей службе-исполнителе, вы можете рассчитывать найти в данный момент большое количество простаивающих потоков.

Вместо того, чтобы эти потоки умирают, только для замены очень короткого времени позже вновь созданными потоками, corePoolSize гарантирует, что всегда будет много вращающихся потоков.