2011-10-14 27 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個任務需要處理,爲什麼不處理它們?