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)
添加回答
舉報