Ответ 1
Нет. Правильный ответ: нет, ScheduledExecutorService не будет создавать новые потоки.
Я использую Executors.newScheduledThreadPool()
, чтобы создать ScheduledExecutorService
, указав количество потоков так:
int corePoolSize = 42;
ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize);
В соответствии с JavaDocs аргумент corePoolSize
устанавливает
количество потоков для хранения в пуле, даже если они неактивны.
Означает ли это, что эта реализация ExecutorService
может создавать более чем corePoolSize
потоки по мере необходимости, аналогично кэшированному пулу потоков?
Нет. Правильный ответ: нет, ScheduledExecutorService не будет создавать новые потоки.
Означает ли это, что эта реализация ExecutorService может создавать потоки более чем
corePoolSize
при необходимости?
Да, это именно то, что это значит. Причиной существования corePoolSize
является затраты на создание потоков. Если вы ожидаете, что будете запускать большое количество недолговечных задач в своей службе-исполнителе, вы можете рассчитывать найти в данный момент большое количество простаивающих потоков.
Вместо того, чтобы эти потоки умирают, только для замены очень короткого времени позже вновь созданными потоками, corePoolSize
гарантирует, что всегда будет много вращающихся потоков.