计划执行者服务是否会根据需要创建新线程?

2022-09-03 06:31:55

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

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

根据JavaDocs,参数集corePoolSize

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

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


答案 1

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

在此处查看答案


答案 2

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

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

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


推荐