1. 程式人生 > >ThreadPoolExecutor執行緒池詳細說明

ThreadPoolExecutor執行緒池詳細說明

ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler)
corePoolSize: 核心執行緒數,能夠同時執行的任務數量
maximumPoolSize:除去緩衝佇列中等待的任務,最大能容納的任務數
keepAliveTime:超出workQueue的等待任務的存活時間
unit:時間單位
workQueue:阻塞等待執行緒的佇列,一般使用new LinkedBlockingDeque()這個,如果不指定容量,
會一直往裡邊新增,沒有限制;
threadFactory:建立執行緒的工廠,使用系統預設的類
handler:當任務數超過maximumPoolSize時,對任務的處理策略,預設策略是拒絕新增

執行流程:當執行緒數小於corePoolSize時,每新增一個任務,則立即開啟執行緒執行
當corePoolSize滿的時候,後面新增的任務將放入緩衝佇列workQueue等待;
當workQueue也滿的時候,看是否超過maximumPoolSize執行緒數,如果超過,預設拒絕執行
舉例說明:
假如:corePoolSize=2,maximumPoolSize=3,workQueue容量為8;
最開始,執行的任務A,B,此時corePoolSize已用完,再次執行任務C,則
C將被放入緩衝佇列workQueue中等待著,如果後來又添加了7個任務,此時workQueue已滿,
則後面再來的任務將會和maximumPoolSize比較,由於maximumPoolSize為3,所以只能容納1個了,
因為有2個在corePoolSize中運行了,所以後面來的任務預設都會被拒絕。