轉載自?http://blog.csdn.net/zhouhl_cn/article/details/7392607 感謝分享
項目中開發通常不會直接使用ThreadPoolExecutor,而是通過Executors.newFixedThreadPool()這種簡易寫法,創建適合自己項目的線程池。但是了解最基本的線程池ThreadPoolExecutor是十分必要的,尤其是做一些定制方法。比如在執行完一個線程任務后,進行后續操作,此時如果自己實現一個類繼承自ThreadPoolExecutor
public class PmCollectDataHandlePool extends ThreadPoolExecutor
并且實現
@Override
protected void afterExecute(Runnable r, Throwable t) 是十分方便的做法
一下參數來自轉載
- corePoolSize
?
核心線程數,核心線程會一直存活,即使沒有任務需要處理。當線程數小于核心線程數時,即使現有的線程空閑,線程池也會優先創建新線程來處理任務,而不是直接交給現有的線程處理。
核心線程在allowCoreThreadTimeout被設置為true時會超時退出,默認情況下不會退出。
?
- maxPoolSize
當線程數大于或等于核心線程,且任務隊列已滿時,線程池會創建新的線程,直到線程數量達到maxPoolSize。如果線程數已等于maxPoolSize,且任務隊列已滿,則已超出線程池的處理能力,線程池會拒絕處理任務而拋出異常。
?
- keepAliveTime
?
當線程空閑時間達到keepAliveTime,該線程會退出,直到線程數量等于corePoolSize。如果allowCoreThreadTimeout設置為true,則所有線程均會退出直到線程數量為0。
?
- allowCoreThreadTimeout
是否允許核心線程空閑退出,默認值為false。
- queueCapacity
任務隊列容量。從maxPoolSize的描述上可以看出,任務隊列的容量會影響到線程的變化,因此任務隊列的長度也需要恰當的設置。
?
線程池按以下行為執行任務
?
- 當線程數小于核心線程數時,創建線程。
- 當線程數大于等于核心線程數,且任務隊列未滿時,將任務放入任務隊列。
- 當線程數大于等于核心線程數,且任務隊列已滿
- 若線程數小于最大線程數,創建線程
- 若線程數等于最大線程數,拋出異常,拒絕任務