線程池的參數和拒絕策略

線程池的參數有哪些

corePoolSize 核心線程數,指保留的線程池大小(不超過maximumPoolSize值時,線程池中最多有corePoolSize 個線程工作)。 

maximumPoolSize 指的是線程池的最大大小(線程池中最大有corePoolSize 個線程可運行)。 

keepAliveTime 指的是空閒線程結束的超時時間(當一個線程不工作時,過keepAliveTime 長時間將停止該線程)。 

unit 是一個枚舉,表示 keepAliveTime 的單位(有NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS,7個可選值)。 納秒,微秒,毫秒,秒,分,小時,天

workQueue 表示存放任務的隊列(存放需要被線程池執行的線程隊列)。 

handler 拒絕策略(添加任務失敗後如何處理該任務).

有幾種拒絕策略

AbortPolicy

ThreadPoolExecutor.AbortPolicy:丟棄任務並拋出RejectedExecutionException異常。
這是線程池默認的拒絕策略,在任務不能再提交的時候,拋出異常,及時反饋程序運行狀態。如果是比較關鍵的業務,
推薦使用此拒絕策略,這樣子在系統不能承載更大的併發量的時候,能夠及時的通過異常發現。

DiscardPolicy

ThreadPoolExecutor.DiscardPolicy:丟棄任務,但是不拋出異常。如果線程隊列已滿,
則後續提交的任務都會被丟棄,且是靜默丟棄。

使用此策略,可能會使我們無法發現系統的異常狀態。建議是一些無關緊要的業務採用此策略。
例如,本人的博客網站統計閱讀量就是採用的這種拒絕策略。

DiscardOldestPolicy

ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊列最前面的任務,然後重新提交被拒絕的任務。
此拒絕策略,是一種喜新厭舊的拒絕策略。是否要採用此種拒絕策略,還得根據實際業務是否允許丟棄老任務來認真衡量。

CallerRunsPolicy

ThreadPoolExecutor.CallerRunsPolicy:由調用線程處理該任務
如果任務被拒絕了,則由調用線程(提交任務的線程)直接執行此任務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章