ThreadPoolExecutor構(gòu)造時的關(guān)鍵參數(shù)如下:
corePoolSize
maximumPoolSize
keepAliveTime
unit
workQueue
當(dāng)前的線程數(shù)小于corePoolSize時于樟,只要有新任務(wù)提交勤篮,無論已經(jīng)啟動的線程是否處于IDLE狀態(tài)棋凳,pool都會創(chuàng)建一個新線程來執(zhí)行這個新任務(wù)糠亩。當(dāng)前的線程數(shù)等于corePoolSize時, 如果有新任務(wù)提交,若workQueue未滿开伏,則將新任務(wù)加入workQueue栅迄;若workQueue已滿号俐,pool會創(chuàng)建一個新線程,從workQueue頂部取出一個任務(wù)處理救欧,同時將新提交的任務(wù)放入workQueue衰粹。當(dāng)前的線程數(shù)等于maximumPoolSize時,如果有新任務(wù)提交笆怠,若workQueue未滿铝耻,則將新任務(wù)加入workQueue;若workQueue已滿蹬刷,則新任務(wù)會被丟棄瓢捉。超出corePoolSize的線程處于IDLE狀態(tài)超過keepAliveTime(unit是keepAliveTime的單位)后, 會自動退出频丘。corePoolSize之內(nèi)的線程在ThreadPoolExecutor shutdown之前默認(rèn)是不會退出的,不過可以通過調(diào)用allowCoreThreadTimeout
來設(shè)置corePoolSize之內(nèi)的線程處于IDLE狀態(tài)超過keepAliveTime后是否退出泡态。