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