亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何更改 ScheduledExecutorService 中的線程池大???

如何更改 ScheduledExecutorService 中的線程池大???

小唯快跑啊 2022-06-15 16:28:22
我需要帶有動態線程池的 ScheduledExecutorService。我想動態更改線程池大小。我怎樣才能做到這一點?class ExecutorTask {    private ScheduledExecutorService service;    public void add(Task task) {        // I need thread pool size == count added tasks.        service.scheduleAtFixedRate(this::start, 0, 10, TimeUnit.SECONDS);    }}也許你可以建議我另一個線程池?
查看完整描述

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 幾乎不是一個好主意,因為一旦它們有資格運行,這可能會使池沒有線程來處理任務。


查看完整回答
反對 回復 2022-06-15
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

你可以使用setCorePoolSize(int)方法。

還使用Executors.newCachedThreadPool您提供創建線程池大小的責任ThreadPoolExecutor。

如果ThreadPoolExecutor需要執行新任務,則創建新線程,并重用現有線程Executors.newCachedThreadPool()


查看完整回答
反對 回復 2022-06-15
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

也許這就是您在 Executors Util 類中尋找的內容:

ExecutorService executorService = Executors.newScheduledThreadPool(5)


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關注
  • 487 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號