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

时间:2012-06-25 21:12:42

标签: java executorservice

我正在使用Executors.newScheduledThreadPool()创建ScheduledExecutorService,指定线程数,如下所示:

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

根据JavaDocs,corePoolSize参数设置

  

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

这是否意味着此ExecutorService实施可能会根据需要创建超过corePoolSize个帖子,类似于cached thread pool

2 个答案:

答案 0 :(得分:8)

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

See answer here

答案 1 :(得分:6)

  

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

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

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