線程池(Java)

線程池分四類:

1.newSingleThreadExecutor()

單個(gè)線程容量


截屏-20190926174255-801x168.png

2.newFixedThreadPool()

固定線程數(shù)量


截屏-20190926174436-834x132.png

3.newCachedThreadPool()

可根據(jù)實(shí)際情況調(diào)整線程數(shù)量
優(yōu)先使用可復(fù)用的線程


截屏-20190926174515-776x146.png

4.newScheduledThreadPool()

線程數(shù)量為1谍夭,
可以固定時(shí)間延時(shí)執(zhí)行任務(wù)
或周期性執(zhí)行任務(wù)


截屏-20190926205643-932x108.png
public ThreadPoolExecutor(int corePoolSize,/*線程池中線程數(shù)*/
                              int maximumPoolSize,/*線程池中最大線程數(shù)*/
                              long keepAliveTime,/*當(dāng)線程池線程數(shù)超過corePoolSize后叽躯,空閑線程的最大存活時(shí)間*/
                              TimeUnit unit,/*keepAliveTime單位*/
                              BlockingQueue<Runnable> workQueue,/*任務(wù)隊(duì)列*/
                              ThreadFactory threadFactory,/*創(chuàng)建線程厢塘,默認(rèn)即可*/
                              RejectedExecutionHandler handler/*拒絕策略*/) {
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

前幾個(gè)都很好理解州袒,我們從workQueue開始

workQueue是指被提交但是未執(zhí)行的任務(wù)隊(duì)列歪玲,它是一個(gè)BlockingQueue接口對(duì)象载矿,僅用于存Runnable對(duì)象漆羔,接下來看下可用的幾種隊(duì)列:

1.直接提交隊(duì)列

由SynchronousQueue對(duì)象提供剿干。
沒有容量婆芦,目的就是為了實(shí)現(xiàn)拒絕策略怕磨,每一個(gè)插入操作都要等待相應(yīng)的刪除操作,反之消约,每一個(gè)刪除操作都要等待相應(yīng)的插入操作肠鲫。
使用SynchronousQueue這種隊(duì)列,提交的任務(wù)不會(huì)真正的保存荆陆,而是將新任務(wù)提交給線程滩届,沒有空閑線程,就新建一個(gè)被啼,到達(dá)最大值了帜消,就執(zhí)行拒絕策略!
使用SynchronousQueue隊(duì)列浓体,通常要設(shè)置很大的maximumPoolSize的值泡挺,否則很容易執(zhí)行拒絕策略。

2.有界任務(wù)隊(duì)列(以ArrayBlockingQueue為例)

ArrayBlockingQueue的構(gòu)造函數(shù)必須提供容量參數(shù)命浴。

public ArrayBlockingQueue(int capacity) 

使用ArrayBlockingQueue時(shí)娄猫,如果有新任務(wù)需要執(zhí)行,
如果線程池的實(shí)際線程數(shù)小于corePoolSize生闲,則會(huì)優(yōu)先創(chuàng)建新的線程媳溺,
若大于corePoolSize,則會(huì)將新任務(wù)放進(jìn)等待隊(duì)列碍讯。
如果等隊(duì)列已滿悬蔽,無法加入,
在總線程數(shù)不大于maximumPoolSize的前提下捉兴,創(chuàng)建新線程執(zhí)行任務(wù)蝎困。
否則,執(zhí)行拒絕策略倍啥。

3.無界任務(wù)隊(duì)列(以LinkedBlockedQueue為例)

這種隊(duì)列禾乘,除非系統(tǒng)資源耗盡,否則不存在任務(wù)入隊(duì)失敗的情況虽缕。
新任務(wù)來的時(shí)候
線程數(shù)小于corePoolSize時(shí)始藕,線程池會(huì)生成新的線程執(zhí)行任務(wù),
等于corePoolSize后,就無限往等待隊(duì)列里入隊(duì)鳄虱。
5苋!W疽选>黾恰!如果處理速度遠(yuǎn)小于創(chuàng)建速度倍踪,等待隊(duì)列就會(huì)很快增長(zhǎng)系宫,直到耗盡系統(tǒng)資源!=ǔ怠@┙琛!缤至!

4.優(yōu)先任務(wù)隊(duì)列(通過PriorityBlockedQueue來實(shí)現(xiàn))

PriorityBlockedQueue可以控制任務(wù)的執(zhí)行先后順序潮罪。是一個(gè)特殊的無界隊(duì)列。

拒絕策略

1.AbortPolicy:直接拋出異常

2.CallerRunPolicy:只要線程池未關(guān)閉领斥,就將任務(wù)運(yùn)行在調(diào)用者的線程里面

3.DiscardOldestPolicy:丟棄最老的請(qǐng)求嫉到,即將被執(zhí)行的一個(gè)任務(wù),并嘗試再提交當(dāng)前任務(wù)

4.DiscardPolicy:直接丟棄任務(wù)月洛!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末何恶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嚼黔,更是在濱河造成了極大的恐慌细层,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唬涧,死亡現(xiàn)場(chǎng)離奇詭異疫赎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碎节,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門捧搞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钓株,你說我怎么就攤上這事∧敖” “怎么了轴合?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碗短。 經(jīng)常有香客問我受葛,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任总滩,我火速辦了婚禮纲堵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闰渔。我一直安慰自己席函,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布冈涧。 她就那樣靜靜地躺著茂附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪督弓。 梳的紋絲不亂的頭發(fā)上营曼,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音愚隧,去河邊找鬼蒂阱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狂塘,可吹牛的內(nèi)容都是我干的录煤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼睹耐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼辐赞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硝训,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤响委,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后窖梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赘风,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纵刘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邀窃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡假哎,死狀恐怖瞬捕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舵抹,我是刑警寧澤肪虎,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站惧蛹,受9級(jí)特大地震影響扇救,放射性物質(zhì)發(fā)生泄漏刑枝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一迅腔、第九天 我趴在偏房一處隱蔽的房頂上張望装畅。 院中可真熱鬧,春花似錦沧烈、人聲如沸掠兄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徽千。三九已至,卻和暖如春汤锨,著一層夾襖步出監(jiān)牢的瞬間双抽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工闲礼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牍汹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓柬泽,卻偏偏與公主長(zhǎng)得像慎菲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锨并,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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