線程池-ThreadPoolExecutor

一、線程池是什么

一般來說,線程池是一種池化技術(shù)的實(shí)現(xiàn)主慰,通過一個(gè)或者多個(gè)線程來執(zhí)行用戶提交的任務(wù),解決了每執(zhí)行一個(gè)任務(wù)就創(chuàng)建一個(gè)線程造成的資源浪費(fèi)問題鲫售,同時(shí)也提供了很多對線程進(jìn)行管理的操作方法共螺,比如停止一個(gè)線程或者統(tǒng)計(jì)已經(jīng)完成的任務(wù)量等等。

  • 類結(jié)構(gòu)


    image.png

從類的結(jié)構(gòu)圖中看到情竹,ThreadPoolExecutor實(shí)現(xiàn)了Executor以及ExecutorService的接口
1藐不、Executor:Executor提供了execute()接口,ThreadPoolExecutor對其進(jìn)行了實(shí)現(xiàn)
2秦效、ExecutorService:ExecutorService定義了shutdown()雏蛮、submit()等接口,主要作用是對線程池狀態(tài)的控制以及定義任務(wù)提交的方式
3阱州、AbstractExecutorService:AbstractExecuorService是模板方法設(shè)計(jì)模式的實(shí)現(xiàn)挑秉,提供了ExecutorService接口的默認(rèn)實(shí)現(xiàn),提供線程池通用的邏輯能力苔货,比如submit()方法

二犀概、類參數(shù)

image.png
  • 阻塞隊(duì)列
image.png
  1. ArrayBlockingQueue

    image.png

  2. LinkedBlockingQueue

    image.png

  3. DelayQueue

    image.png

  4. SynchronousQueue
    可以簡單的理解為:如果要往隊(duì)列放元素必須要有另一個(gè)線程想從隊(duì)列中取元素鹊汛,沒有現(xiàn)場要取你就放不進(jìn)去

    image.png

  5. TransferQueue
    TransferQueue可以理解為SynchronousQueue的加強(qiáng)版,比如公平鎖阱冶,按請求先后順序進(jìn)行處理

    image.png

  6. PriorityBlockingQueue

    image.png

  • 拒絕策略
image.png
  1. DiscardOldestPolicy 丟棄隊(duì)列中第一個(gè)任務(wù)
  2. AbortPolicy 拋異常
  3. CallerRunsPolicy 交給提交過來的線程去執(zhí)行
  4. DiscardPolicy 丟棄,不做任何操作

三滥嘴、線程池類型

  1. newCachedThreadPool:創(chuàng)建一個(gè)可緩存線程池木蹬,如果線程池長度超過處理所需,可靈活回收空閑線程若皱,若線程數(shù)不夠镊叁,則新建線程。

  2. newFixedThreadPool:創(chuàng)建一個(gè)固定大小的線程池走触』奁可控制并發(fā)的線程數(shù)量,如果工作線程數(shù)量達(dá)到線程池初始的最大數(shù)互广,則將提交的任務(wù)存入到池隊(duì)列中敛腌。

  3. newSingleThreadExecutor:創(chuàng)建一個(gè)單線程的線程池,即只創(chuàng)建唯一的工作者線程來執(zhí)行任務(wù)惫皱,像樊,保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。

  4. newScheduleThreadPool:創(chuàng)建一個(gè)定長的線程池旅敷,支持定時(shí)及周期性任務(wù)執(zhí)行生棍。


    image.png

四、踩坑經(jīng)歷

  1. 工作中媳谁,很多小伙伴使用newCachedThreadPool新建線程池涂滴,這個(gè)線程池的最大線程數(shù)是Integer.Max值,正常情況下晴音,是會導(dǎo)致線程池線程太多柔纵,耗盡服務(wù)器資源導(dǎo)致性能問題,所以使用時(shí)考慮清楚
  2. newFixedThreadPool锤躁,任務(wù)隊(duì)列大小可達(dá)Integer.Max首量,正常情況任務(wù)堆積過多絕對導(dǎo)致OOM,已經(jīng)目測過兩次
  3. 如果線程池中的任務(wù)隊(duì)列大小在業(yè)務(wù)發(fā)展過程中不會很大进苍,可以使用線程池加缘,不過一般我建議使用MQ,原因有兩個(gè):一是如果發(fā)生重啟或者服務(wù)器宕機(jī)觉啊,隊(duì)列中的任務(wù)就會丟失拣宏,二是很難控制隊(duì)列中的任務(wù)不會過大,而MQ會自動幫我們保存消息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杠人,一起剝皮案震驚了整個(gè)濱河市勋乾,隨后出現(xiàn)的幾起案子宋下,更是在濱河造成了極大的恐慌,老刑警劉巖辑莫,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件学歧,死亡現(xiàn)場離奇詭異,居然都是意外死亡各吨,警方通過查閱死者的電腦和手機(jī)枝笨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭蜒,“玉大人横浑,你說我怎么就攤上這事√敫” “怎么了徙融?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑰谜。 經(jīng)常有香客問我欺冀,道長,這世上最難降的妖魔是什么萨脑? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任脚猾,我火速辦了婚禮,結(jié)果婚禮上砚哗,老公的妹妹穿的比我還像新娘龙助。我一直安慰自己,他們只是感情好蛛芥,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布提鸟。 她就那樣靜靜地躺著,像睡著了一般仅淑。 火紅的嫁衣襯著肌膚如雪称勋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天涯竟,我揣著相機(jī)與錄音赡鲜,去河邊找鬼。 笑死庐船,一個(gè)胖子當(dāng)著我的面吹牛银酬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筐钟,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼揩瞪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篓冲?” 一聲冷哼從身側(cè)響起李破,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宠哄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嗤攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毛嫉,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年妇菱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了承粤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恶耽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颜启,到底是詐尸還是另有隱情偷俭,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布缰盏,位于F島的核電站涌萤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏口猜。R本人自食惡果不足惜负溪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望济炎。 院中可真熱鬧川抡,春花似錦、人聲如沸须尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耐床。三九已至密幔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撩轰,已是汗流浹背胯甩。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堪嫂,地道東北人偎箫。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像皆串,于是被迫代替她去往敵國和親镜廉。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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