2011-10-14 29 views
0

我将CorePoolSize设置为10,将MaximumPoolSize设置为Integer.MAX_VALUE。如何使用ThreadPoolExecutor减少线程池大小值?

现在我增加了CorePoolSize到15和getPoolSize()显示15个线程。

之后,我减少了CorePoolSize到10,这次getPoolSize()显示15和15线程正在运行。

我只希望线程池中的线程数为CorePoolSize,我不想更改MaximumPoolSize值。我也不想修复CorePoolSize。

这怎么可能?

回答

0

setCorePoolSize状态的文档:

如果新值比当前值小,多余的现有线程将被当他们未来成为闲置终止。

您的线程池是否总是有很多工作要做?如果你让它闲置,你会发现线程在那一刻死掉了吗?您可能需要至少暂时拨打setKeepAlive设置非常短的保活时间(可能为0)。

我怀疑,虽然还有更多任务处理,它会保持现有线程活着 - ,这是有道理的因为你基本上是说你舒服那里是“10个或更多”线程。如果你有超过10个任务需要处理,为什么不处理它们?