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

16

我正在使用Executors.newScheduledThreadPool()来创建一个ScheduledExecutorService,并指定线程数:

int corePoolSize = 42;
ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize);
根据JavaDocs,corePoolSize参数设置了线程池中保留的线程数,即使它们是空闲的。这是否意味着这个ExecutorService实现可能根据需要创建超过corePoolSize线程,类似于cached thread pool

1
核心池大小:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html - assylias
相关链接:http://stackoverflow.com/questions/42495659/how-to-create-a-scheduledexecutorservice-bound-by-only-the-cpu-usage - AlikElzin-kilaka
2个回答

14

干得好。我同意你在已删除的帖子中表达的情绪,这确实有点烦人。 - Matt Ball
1
@Michael - 请解释一下你的想法。 - AlikElzin-kilaka
主要原因是来自文档中的以下句子:“虽然此类继承自ThreadPoolExecutor,但一些继承的调整方法对其没有用处。特别是,由于它作为一个使用corePoolSize线程和无界队列的固定大小池,对maximumPoolSize的调整没有任何有用的效果。” - AlikElzin-kilaka

6
这是否意味着这个ExecutorService实现可能会根据需要创建超过corePoolSize线程的数量?
是的,这正是它的含义。存在corePoolSize的原因是线程创建的开销。如果您希望在执行器服务中触发大量短暂的任务,您可能会发现,在某个时刻,有大量空闲线程。
与其让这些线程死亡,只是在很短的时间内被新创建的线程所取代,corePoolSize将确保始终存在一定数量的旋转线程。

文档!你要么相信文档,要么不相信 :-) - oxbow_lakes
2
好的,看起来这并不是真的。需要查看ScheduledExecutorService的文档,而不仅仅是ThreadPoolExecutorcorePoolSize概念。现在我想知道为什么它没有被称为minimumPoolSize... - Matt Ball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接