1. 程式人生 > >Java線程池使用和常用參數(待續)

Java線程池使用和常用參數(待續)

err time ava 踢出 rtp repo 什麽 shutdown dex

一、ThreadPoolExecutor的重要參數

1、corePoolSize:核心線程數
* 核心線程會一直存活,及時沒有任務需要執行
* 當線程數小於核心線程數時,即使有線程空閑,線程池也會優先創建新線程處理
* 設置allowCoreThreadTimeout=true(默認false)時,核心線程會超時關閉

2、queueCapacity:任務隊列容量(阻塞隊列)
* 當核心線程數達到最大時,新任務會放在隊列中排隊等待執行

3、maxPoolSize:最大線程數
* 當線程數>=corePoolSize,且任務隊列已滿時。線程池會創建新線程來處理任務

* 當線程數=maxPoolSize,且任務隊列已滿時,線程池會拒絕處理任務而拋出異常

4、 keepAliveTime:線程空閑時間
* 當線程空閑時間達到keepAliveTime時,線程會退出,直到線程數量=corePoolSize
* 如果allowCoreThreadTimeout=true,則會直到線程數量=0

5、allowCoreThreadTimeout:允許核心線程超時
6、rejectedExecutionHandler:任務拒絕處理器
* 兩種情況會拒絕處理任務:
- 當線程數已經達到maxPoolSize,切隊列已滿,會拒絕新任務

- 當線程池被調用shutdown()後,會等待線程池裏的任務執行完畢,再shutdown。如果在調用shutdown()和線程池真正shutdown之間提交任務,會拒絕新任務
* 線程池會調用rejectedExecutionHandler來處理這個任務。如果沒有設置默認是AbortPolicy,會拋出異常
* ThreadPoolExecutor類有幾個內部實現類來處理這類情況:
- AbortPolicy 丟棄任務,拋運行時異常
- CallerRunsPolicy 執行任務
- DiscardPolicy 忽視,什麽都不會發生
- DiscardOldestPolicy 從隊列中踢出最先進入隊列(最後一個執行)的任務
* 實現RejectedExecutionHandler接口,可自定義處理器

Java線程池使用和常用參數(待續)