線程池的用法

線程池

線程池,一般在使用中是用Executors的靜態(tài)方法來(lái)新建出來(lái)的。比如new FixxedThreadPool new CachedThreadPool new SingleThreadPool ,這三個(gè)是比較常用的情景,但當(dāng)有限特殊情況下需要自己定義自己業(yè)務(wù)場(chǎng)景的線程池來(lái)使用。我們先來(lái)看在JDK1.5版本中ThreadPoolExecutor這個(gè)類;因?yàn)榍罢呷N新建線程池的方法其實(shí)都是這里衍生出來(lái)的

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }```

參數(shù)介紹:
corePoolSize 核心線程數(shù),指保留的線程池大小(不超過(guò)maximumPoolSize值時(shí),線程池中最多有corePoolSize 個(gè)線程工作)。 
maximumPoolSize 指的是線程池的最大大?。ň€程池中最大有corePoolSize 個(gè)線程可運(yùn)行)。 
keepAliveTime 指的是空閑線程結(jié)束的超時(shí)時(shí)間(當(dāng)一個(gè)線程不工作時(shí),過(guò)keepAliveTime 長(zhǎng)時(shí)間將停止該線程)。 
unit 是一個(gè)枚舉,表示 keepAliveTime 的單位(有NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS,7個(gè)可選值)。 
workQueue 表示存放任務(wù)的隊(duì)列(存放需要被線程池執(zhí)行的線程隊(duì)列)。 
handler 拒絕策略(添加任務(wù)失敗后如何處理該任務(wù)).
Executors.defaultThreadFactory():默認(rèn)線程工廠
defaultHandler: 默認(rèn)的策略   拒絕


`
實(shí)際執(zhí)行流程
1、在任務(wù)數(shù)小于corepoolsize時(shí),來(lái)任務(wù)就新建一個(gè)線程來(lái)跑任務(wù)
2、線程數(shù)為corepoolsize時(shí),任務(wù)數(shù)量超過(guò)corepoolsize時(shí),任務(wù)會(huì)到workQueue阻塞隊(duì)列中
3、當(dāng)阻塞隊(duì)列放不下了,當(dāng)maxmumpoolsize大于corePoolSize時(shí)候,會(huì)啟用線程來(lái)跑隊(duì)列中的任務(wù)
4、當(dāng)儲(chǔ)備線程  和 隊(duì)列中都滿的時(shí)候,這個(gè)ThreadPoolExecutor實(shí)在沒(méi)能力處理線程了,就會(huì)執(zhí)行拒絕策略,實(shí)在吃不下了,拋rejectedException異常吧。




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容