16

我是新手ScheduledThreadPoolExecutor(因为我通常使用 simple Timer,但人们一直反对它),我不太明白传递给ScheduledThreadPoolExecutor(int)构造函数的适当整数值是什么。

谁能解释一下?

谢谢

4

2 回答 2

13

在 的情况下ScheduledThreadPoolExecutorcorePoolSize是为执行计划操作而创建的最大线程数。这个线程池是固定大小的,空闲线程保持活动状态。

DrunkenRabbit 的答案很简单,因为ScheduledThreadPoolsExecutor文档明确表示(根本不会出现线程数峰值):

虽然这个类继承自 ThreadPoolExecutor,但一些继承的调优方法对它没有用。特别是,因为它充当使用 corePoolSize 线程和无界队列的固定大小的池,所以对 maximumPoolSize 的调整没有有用的效果。

现在至于值,合理的数字将是应用程序正在运行的 CPU 内核数。

于 2016-08-19T13:31:25.363 回答
0

本质上,corePoolSize 是要在池中维护的线程数。

例如。如果您希望定期有 10 个并发请求,但峰值为 20。corePoolSize 应为 10,最大值为 20。这样,执行程序将创建最多 10 个新线程,即使空闲线程可用。

JavaDocs中所述

核心和最大池大小

ThreadPoolExecutor 将根据 corePoolSize(请参阅 getCorePoolSize())和 maximumPoolSize(请参阅 getMaximumPoolSize())设置的边界自动调整池大小(请参阅 getPoolSize())。当在方法 execute(java.lang.Runnable) 中提交了一个新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程处于空闲状态,也会创建一个新线程来处理该请求。如果运行的线程数多于 corePoolSize 但少于 maximumPoolSize,则仅当队列已满时才会创建新线程。通过将 corePoolSize 和 maximumPoolSize 设置为相同,您可以创建一个固定大小的线程池。通过将 maximumPoolSize 设置为基本上无界的值,例如 Integer.MAX_VALUE,您允许池容纳任意数量的并发任务。最典型的是,

于 2013-04-08T20:36:19.547 回答