ScheduledExecutorService是否会根据需要创建新线程?

Mat*_*all 14 java executorservice

我正在Executors.newScheduledThreadPool()创建一个ScheduledExecutorService,指定线程数如下:

int corePoolSize = 42;
ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize);
Run Code Online (Sandbox Code Playgroud)

根据JavaDocs,corePoolSize参数设置

即使它们处于空闲状态,也要保留在池中的线​​程数.

这是否意味着此ExecutorService实现可能会corePoolSize根据需要创建多个线程,类似于缓存的线程池

Mic*_*ael 8

不是.正确答案是否定的,ScheduledExecutorService不会产生新线程.

见这里的答案


oxb*_*kes 6

这是否意味着此ExecutorService实现可能会corePoolSize根据需要创建多个线程?

是的,这正是它的意思.存在的原因corePoolSize是线程创建的代价.如果您希望在执行程序服务中触发大量短期任务,您可能希望在给定的时间点找到大量空闲线程.

而不是让这些线程死亡,只是在很短的时间内被新创建的线程替换,corePoolSize将确保总是存在许多旋转线程.

  • 嗯,看起来这实际上并非如此。需要查看“ScheduledExecutorService”的文档,而不仅仅是“ThreadPoolExecutor”的“corePoolSize”概念。现在我想知道为什么它不被称为“minimumPoolSize”...... (2认同)