ThreadPoolExecutor

ThreadPoolExecutor構(gòu)造時(shí)的關(guān)鍵參數(shù)如下:

  1. corePoolSize
  2. maximumPoolSize
  3. keepAliveTime
  4. unit
  5. 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后是否退出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容