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

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

Executors.newCachedThreadPool()與Executors.newFixed

Executors.newCachedThreadPool()與Executors.newFixed

慕容森 2019-12-09 10:25:22
newCachedThreadPool() 與 newFixedThreadPool()什么時候應該使用其中一個?就資源利用而言,哪種策略更好?
查看完整描述

3 回答

?
素胚勾勒不出你

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

我認為文檔很好地解釋了這兩個功能的區別和用法:


newFixedThreadPool


創建一個線程池,該線程池重用在共享的無邊界隊列上運行的固定數量的線程。在任何時候,最多nThreads個線程都是活動的處理任務。如果在所有線程都處于活動狀態時提交了其他任務,則它們將在隊列中等待,直到某個線程可用為止。如果在關閉之前執行過程中由于執行失敗導致任何線程終止,則在執行后續任務時將使用新線程代替。池中的線程將一直存在,直到明確將其關閉。


newCachedThreadPool


創建一個線程池,該線程池根據需要創建新線程,但是將在先前構造的線程可用時重用它們。這些池通常將提高執行許多短期異步任務的程序的性能。如果可用,執行調用將重用以前構造的線程。如果沒有可用的現有線程,則將創建一個新線程并將其添加到池中。六十秒內未使用的線程將終止并從緩存中刪除。因此,保持空閑時間足夠長的池不會消耗任何資源。請注意,可以使用ThreadPoolExecutor構造函數創建具有相似屬性但不同細節(例如,超時參數)的池。


在資源方面,它newFixedThreadPool將使所有線程一直運行,直到明確終止它們為止。在newCachedThreadPool60秒鐘內未使用的線程被終止并從緩存中刪除。


在這種情況下,資源消耗將在很大程度上取決于情況。例如,如果您有大量長時間運行的任務,我建議您使用FixedThreadPool。至于CachedThreadPool,文檔說:“這些池通常可以提高執行許多短期異步任務的程序的性能”。


查看完整回答
反對 回復 2019-12-09
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

如果您不擔心可調用/可運行任務的無限隊列,則可以使用其中之一。正如布魯諾建議,我也喜歡newFixedThreadPool到newCachedThreadPool這兩者之間。


但ThreadPoolExecutor的 規定相比,它更靈活的功能newFixedThreadPool或newCachedThreadPool


ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 

TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,

RejectedExecutionHandler handler)

好處:


您可以完全控制BlockingQueue的大小。與前兩個選項不同,它不是無限的。由于系統中出現意外的動蕩,未完成的可調用/可運行任務的大量堆積,我不會出現內存不足的錯誤。


您可以實施自定義拒絕處理策略,也可以使用以下策略之一:


默認情況下ThreadPoolExecutor.AbortPolicy,處理程序在拒絕時引發運行時RejectedExecutionException。


在中ThreadPoolExecutor.CallerRunsPolicy,調用執行自己的線程運行任務。這提供了一種簡單的反饋控制機制,將降低新任務提交的速度。


在中ThreadPoolExecutor.DiscardPolicy,簡單地刪除了無法執行的任務。


在中ThreadPoolExecutor.DiscardOldestPolicy,如果未關閉執行程序,則將丟棄工作隊列開頭的任務,然后重試執行(這可能再次失敗,從而導致重復執行此操作)。


您可以為以下用例實現自定義線程工廠:


設置更具描述性的線程名稱

設置線程守護程序狀態

設置線程優先級


查看完整回答
反對 回復 2019-12-09
  • 3 回答
  • 0 關注
  • 1591 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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