22 Executor與線(xiàn)程池

線(xiàn)程是一個(gè)重量級(jí)的對(duì)象,應(yīng)該避免頻繁創(chuàng)建和銷(xiāo)毀矢否。原因:創(chuàng)建線(xiàn)程需要調(diào)用操作系統(tǒng)API仲闽,然后os為線(xiàn)程分配資源

線(xiàn)程池使用的生產(chǎn)者-消費(fèi)者模式:線(xiàn)程池的使用者是生產(chǎn)者,線(xiàn)程池本身就是消費(fèi)者僵朗,工作隊(duì)列就是那么擁塞隊(duì)列赖欣。線(xiàn)程池會(huì)根據(jù)初始化的大小申請(qǐng)這些數(shù)量的線(xiàn)程,此時(shí)線(xiàn)程里并沒(méi)有任務(wù)验庙,同時(shí)線(xiàn)程池有一個(gè)工作隊(duì)列顶吮,在初始化階段也可被初始化。execute()方法提交一個(gè)工作方法粪薛,也就是給線(xiàn)程池里的線(xiàn)程提交一個(gè)干活的模板悴了,這些線(xiàn)程都根據(jù)這個(gè)模板分別處理工作隊(duì)列中的任務(wù)。當(dāng)然,處理的過(guò)程中可能會(huì)有其他新的任務(wù)進(jìn)來(lái)湃交,放入到工作隊(duì)列中等待熟空。


使用 Java 中的線(xiàn)程池

Java 提供的線(xiàn)程池相關(guān)的工具類(lèi)中,最核心的是 ThreadPoolExecutor

ThreadPoolExecutor初始化參數(shù)

把線(xiàn)程池類(lèi)比為一個(gè)項(xiàng)目組巡揍,而線(xiàn)程就是項(xiàng)目組的成員。
corePoolSize:表示線(xiàn)程池保有的最小線(xiàn)程數(shù)菌瘪。有些項(xiàng)目很閑腮敌,但是也不能把人都撤了,至少要留 corePoolSize 個(gè)人堅(jiān)守陣地俏扩。

maximumPoolSize:表示線(xiàn)程池創(chuàng)建的最大線(xiàn)程數(shù)糜工。當(dāng)項(xiàng)目很忙時(shí),就需要加人录淡,但是也不能無(wú)限制地加捌木,最多就加到 maximumPoolSize 個(gè)人。當(dāng)項(xiàng)目閑下來(lái)時(shí)嫉戚,就要撤人了刨裆,最多能撤到 corePoolSize 個(gè)人。

keepAliveTime & unit:上面提到項(xiàng)目根據(jù)忙閑來(lái)增減人員彬檀,那在編程世界里帆啃,如何定義忙和閑呢?很簡(jiǎn)單窍帝,一個(gè)線(xiàn)程如果在一段時(shí)間內(nèi)努潘,都沒(méi)有執(zhí)行任務(wù),說(shuō)明很閑坤学,keepAliveTime 和 unit 就是用來(lái)定義這個(gè)“一段時(shí)間”的參數(shù)疯坤。也就是說(shuō)深浮,如果一個(gè)線(xiàn)程空閑了keepAliveTime & unit這么久压怠,而且線(xiàn)程池的線(xiàn)程數(shù)大于 corePoolSize ,那么這個(gè)空閑的線(xiàn)程就要被回收了飞苇。

workQueue:工作隊(duì)列刑峡,和上面示例代碼的工作隊(duì)列同義。

threadFactory:通過(guò)這個(gè)參數(shù)你可以自定義如何創(chuàng)建線(xiàn)程玄柠,例如你可以給線(xiàn)程指定一個(gè)有意義的名字突梦。

handler:通過(guò)這個(gè)參數(shù)你可以自定義任務(wù)的拒絕策略。如果線(xiàn)程池中所有的線(xiàn)程都在忙碌羽利,并且工作隊(duì)列也滿(mǎn)了(前提是工作隊(duì)列是有界隊(duì)列)宫患,那么此時(shí)提交任務(wù),線(xiàn)程池就會(huì)拒絕接收这弧。至于拒絕的策略娃闲,你可以通過(guò) handler 這個(gè)參數(shù)來(lái)指定虚汛。

????????1 .CallerRunsPolicy:提交任務(wù)的線(xiàn)程自己去執(zhí)行該任務(wù)。??

????????2. AbortPolicy:默認(rèn)的拒絕策略皇帮,會(huì) throws RejectedExecutionException卷哩。

????????3.DiscardPolicy:直接丟棄任務(wù),沒(méi)有任何異常拋出属拾。

????????4.DiscardOldestPolicy:丟棄最老的任務(wù)将谊,其實(shí)就是把最早進(jìn)入工作隊(duì)列的任務(wù)丟棄,然后把新任務(wù)加入到工作隊(duì)列渐白。

Executors靜態(tài)工廠類(lèi)提供了快速創(chuàng)建線(xiàn)程池的方法

1. ExecutorServiceexecutorService = Executors.newSingleThreadExecutor();??創(chuàng)建一個(gè)單線(xiàn)程化的Executor

2.ExecutorServiceexecutorService = Executors.newCachedThreadPool();??創(chuàng)建一個(gè)可緩存的線(xiàn)程池尊浓,調(diào)用execute 將重用以前構(gòu)造的線(xiàn)程(如果線(xiàn)程可用)。如果沒(méi)有可用的線(xiàn)程纯衍,則創(chuàng)建一個(gè)新線(xiàn)程并添加到池中栋齿。終止并從緩存中移除那些已有 60 秒鐘未被使用的線(xiàn)程。

3.ExecutorServiceexecutorService = Executors.newFixedThreadPool(大小);?創(chuàng)建固定數(shù)目線(xiàn)程的線(xiàn)程池

4.ExecutorServiceexecutorService = Executors.newScheduledThreadPool(大小);??創(chuàng)建一個(gè)支持定時(shí)及周期性的任務(wù)執(zhí)行的線(xiàn)程池襟诸,多數(shù)情況下可用來(lái)替代Timer類(lèi)瓦堵。

Executors提供的許多方法使用的無(wú)界的工作隊(duì)列,高負(fù)載情況下可能會(huì)OOM歌亲,不安全谷丸,不建議使用。強(qiáng)烈建議使用有界隊(duì)列

https://blog.csdn.net/weixin_40304387/article/details/80508236? ?這篇文章很不錯(cuò)应结,對(duì)了解Executor框架有幫助刨疼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹅龄,隨后出現(xiàn)的幾起案子揩慕,更是在濱河造成了極大的恐慌,老刑警劉巖扮休,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迎卤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玷坠,警方通過(guò)查閱死者的電腦和手機(jī)蜗搔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)八堡,“玉大人樟凄,你說(shuō)我怎么就攤上這事⌒置欤” “怎么了缝龄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叔壤,道長(zhǎng)瞎饲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任炼绘,我火速辦了婚禮嗅战,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俺亮。我一直安慰自己驮捍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布铅辞。 她就那樣靜靜地躺著厌漂,像睡著了一般萨醒。 火紅的嫁衣襯著肌膚如雪斟珊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天富纸,我揣著相機(jī)與錄音囤踩,去河邊找鬼。 笑死晓褪,一個(gè)胖子當(dāng)著我的面吹牛堵漱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涣仿,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼勤庐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了好港?” 一聲冷哼從身側(cè)響起愉镰,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钧汹,沒(méi)想到半個(gè)月后丈探,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拔莱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年碗降,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塘秦。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讼渊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尊剔,到底是詐尸還是另有隱情精偿,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站笔咽,受9級(jí)特大地震影響搔预,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叶组,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一拯田、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甩十,春花似錦船庇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至橄霉,卻和暖如春窃爷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姓蜂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工按厘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钱慢。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓逮京,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親束莫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懒棉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355