我是新手ScheduledThreadPoolExecutor
(因为我通常使用 simple Timer
,但人们一直反对它),我不太明白传递给ScheduledThreadPoolExecutor(int)
构造函数的适当整数值是什么。
谁能解释一下?
谢谢
我是新手ScheduledThreadPoolExecutor
(因为我通常使用 simple Timer
,但人们一直反对它),我不太明白传递给ScheduledThreadPoolExecutor(int)
构造函数的适当整数值是什么。
谁能解释一下?
谢谢
在 的情况下ScheduledThreadPoolExecutor
,corePoolSize
是为执行计划操作而创建的最大线程数。这个线程池是固定大小的,空闲线程保持活动状态。
DrunkenRabbit 的答案很简单,因为ScheduledThreadPoolsExecutor
文档明确表示(根本不会出现线程数峰值):
虽然这个类继承自 ThreadPoolExecutor,但一些继承的调优方法对它没有用。特别是,因为它充当使用 corePoolSize 线程和无界队列的固定大小的池,所以对 maximumPoolSize 的调整没有有用的效果。
现在至于值,合理的数字将是应用程序正在运行的 CPU 内核数。
本质上,corePoolSize 是要在池中维护的线程数。
例如。如果您希望定期有 10 个并发请求,但峰值为 20。corePoolSize 应为 10,最大值为 20。这样,执行程序将创建最多 10 个新线程,即使空闲线程可用。
核心和最大池大小
ThreadPoolExecutor 将根据 corePoolSize(请参阅 getCorePoolSize())和 maximumPoolSize(请参阅 getMaximumPoolSize())设置的边界自动调整池大小(请参阅 getPoolSize())。当在方法 execute(java.lang.Runnable) 中提交了一个新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程处于空闲状态,也会创建一个新线程来处理该请求。如果运行的线程数多于 corePoolSize 但少于 maximumPoolSize,则仅当队列已满时才会创建新线程。通过将 corePoolSize 和 maximumPoolSize 设置为相同,您可以创建一个固定大小的线程池。通过将 maximumPoolSize 设置为基本上无界的值,例如 Integer.MAX_VALUE,您允许池容纳任意数量的并发任务。最典型的是,