3 回答
TA贡献1873条经验 获得超9个赞
您可以使用ScheduledThreadPoolExecutor轻松做到这一点。
//Init executor
int initialPoolSize = 5;
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(initialPoolSize);
//[...] do something
//Change max size
int newPoolSize = 10;
executor.setCorePoolSize(newPoolSize);
请注意,继承的方法setMaximumPoolSize(int)对ScheduledThreadPoolExecutor 没有影响。要更改池大小,您需要更改 corePoolSize:
虽然这个类继承自 ThreadPoolExecutor,但一些继承的调优方法对它没有用。特别是,因为它充当使用 corePoolSize 线程和无界队列的固定大小的池,所以对 maximumPoolSize 的调整没有有用的效果。 此外,将 corePoolSize 设置为零或使用 allowCoreThreadTimeOut 几乎不是一个好主意,因为一旦它们有资格运行,这可能会使池没有线程来处理任务。
TA贡献1853条经验 获得超9个赞
你可以使用setCorePoolSize(int)
方法。
还使用Executors.newCachedThreadPool
您提供创建线程池大小的责任ThreadPoolExecutor
。
如果ThreadPoolExecutor
需要执行新任务,则创建新线程,并重用现有线程Executors.newCachedThreadPool()
TA贡献1943条经验 获得超7个赞
也许这就是您在 Executors Util 类中寻找的内容:
ExecutorService executorService = Executors.newScheduledThreadPool(5)
添加回答
举报