ThreadPoolExecutor構(gòu)造時(shí)的關(guān)鍵參數(shù)如下:
corePoolSize
maximumPoolSize
keepAliveTime
unit
workQueue
當(dāng)前的線程數(shù)小于corePoolSize時(shí),只要有新任務(wù)提交,無(wú)論已經(jīng)啟動(dòng)的線程是否處于IDLE狀態(tài),pool都會(huì)創(chuàng)建一個(gè)新線程來(lái)執(zhí)行這個(gè)新任務(wù)。當(dāng)前的線程數(shù)等于corePoolSize時(shí), 如果有新任務(wù)提交,若workQueue未滿(mǎn),則將新任務(wù)加入workQueue;若workQueue已滿(mǎn),pool會(huì)創(chuàng)建一個(gè)新線程,從workQueue頂部取出一個(gè)任務(wù)處理,同時(shí)將新提交的任務(wù)放入workQueue。當(dāng)前的線程數(shù)等于maximumPoolSize時(shí),如果有新任務(wù)提交,若workQueue未滿(mǎn),則將新任務(wù)加入workQueue;若workQueue已滿(mǎn),則新任務(wù)會(huì)被丟棄。超出corePoolSize的線程處于IDLE狀態(tài)超過(guò)keepAliveTime(unit是keepAliveTime的單位)后, 會(huì)自動(dòng)退出。corePoolSize之內(nèi)的線程在ThreadPoolExecutor shutdown之前默認(rèn)是不會(huì)退出的,不過(guò)可以通過(guò)調(diào)用allowCoreThreadTimeout
來(lái)設(shè)置corePoolSize之內(nèi)的線程處于IDLE狀態(tài)超過(guò)keepAliveTime后是否退出。