色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

瀏覽:3日期:2022-08-16 09:25:20

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

什么是線程池?

很簡(jiǎn)單,簡(jiǎn)單看名字就知道是裝有線程的池子,我們可以把要執(zhí)行的多線程交給線程池來(lái)處理,和連接池的概念一樣,通過(guò)維護(hù)一定數(shù)量的線程池來(lái)達(dá)到多個(gè)線程的復(fù)用。

線程池的好處

我們知道不用線程池的話,每個(gè)線程都要通過(guò)new Thread(xxRunnable).start()的方式來(lái)創(chuàng)建并運(yùn)行一個(gè)線程,線程少的話這不會(huì)是問(wèn)題,而真實(shí)環(huán)境可能會(huì)開(kāi)啟多個(gè)線程讓系統(tǒng)和程序達(dá)到最佳效率,當(dāng)線程數(shù)達(dá)到一定數(shù)量就會(huì)耗盡系統(tǒng)的CPU和內(nèi)存資源,也會(huì)造成GC頻繁收集和停頓,因?yàn)槊看蝿?chuàng)建和銷(xiāo)毀一個(gè)線程都是要消耗系統(tǒng)資源的,如果為每個(gè)任務(wù)都創(chuàng)建線程這無(wú)疑是一個(gè)很大的性能瓶頸。

所以,線程池中的線程復(fù)用極大節(jié)省了系統(tǒng)資源,當(dāng)線程一段時(shí)間不再有任務(wù)處理時(shí)它也會(huì)自動(dòng)銷(xiāo)毀,而不會(huì)長(zhǎng)駐內(nèi)存。

線程池核心類

在java.util.concurrent包中我們能找到線程池的定義,其中ThreadPoolExecutor是我們線程池核心類,首先看看線程池類的主要參數(shù)有哪些。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

corePoolSize:線程池的核心大小,也可以理解為最小的線程池大小。

maximumPoolSize:最大線程池大小。

keepAliveTime:空余線程存活時(shí)間,指的是超過(guò)corePoolSize的空余線程達(dá)到多長(zhǎng)時(shí)間才進(jìn)行銷(xiāo)毀。

unit:銷(xiāo)毀時(shí)間單位。

workQueue:存儲(chǔ)等待執(zhí)行線程的工作隊(duì)列。

threadFactory:創(chuàng)建線程的工廠,一般用默認(rèn)即可。

handler:拒絕策略,當(dāng)工作隊(duì)列、線程池全已滿時(shí)如何拒絕新任務(wù),默認(rèn)拋出異常。

線程池工作流程

1、如果線程池中的線程小于corePoolSize時(shí)就會(huì)創(chuàng)建新線程直接執(zhí)行任務(wù)。

2、如果線程池中的線程大于corePoolSize時(shí)就會(huì)暫時(shí)把任務(wù)存儲(chǔ)到工作隊(duì)列workQueue中等待執(zhí)行。

3、如果工作隊(duì)列workQueue也滿時(shí):當(dāng)線程數(shù)小于最大線程池?cái)?shù)maximumPoolSize時(shí)就會(huì)創(chuàng)建新線程來(lái)處理,而線程數(shù)大于等于最大線程池?cái)?shù)maximumPoolSize時(shí)就會(huì)執(zhí)行拒絕策略。

線程池分類

Executors是jdk里面提供的創(chuàng)建線程池的工廠類,它默認(rèn)提供了4種常用的線程池應(yīng)用,而不必我們?nèi)ブ貜?fù)構(gòu)造。

newFixedThreadPool

固定線程池,核心線程數(shù)和最大線程數(shù)固定相等,而空閑存活時(shí)間為0毫秒,說(shuō)明此參數(shù)也無(wú)意義,工作隊(duì)列為最大為Integer.MAX_VALUE大小的阻塞隊(duì)列。當(dāng)執(zhí)行任務(wù)時(shí),如果線程都很忙,就會(huì)丟到工作隊(duì)列等有空閑線程時(shí)再執(zhí)行,隊(duì)列滿就執(zhí)行默認(rèn)的拒絕策略。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

newCachedThreadPool

帶緩沖線程池,從構(gòu)造看核心線程數(shù)為0,最大線程數(shù)為Integer最大值大小,超過(guò)0個(gè)的空閑線程在60秒后銷(xiāo)毀,SynchronousQueue這是一個(gè)直接提交的隊(duì)列,意味著每個(gè)新任務(wù)都會(huì)有線程來(lái)執(zhí)行,如果線程池有可用線程則執(zhí)行任務(wù),沒(méi)有的話就創(chuàng)建一個(gè)來(lái)執(zhí)行,線程池中的線程數(shù)不確定,一般建議執(zhí)行速度較快較小的線程,不然這個(gè)最大線程池邊界過(guò)大容易造成內(nèi)存溢出。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

newSingleThreadExecutor

單線程線程池,核心線程數(shù)和最大線程數(shù)均為1,空閑線程存活0毫秒同樣無(wú)意思,意味著每次只執(zhí)行一個(gè)線程,多余的先存儲(chǔ)到工作隊(duì)列,一個(gè)一個(gè)執(zhí)行,保證了線程的順序執(zhí)行。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

newScheduledThreadPool

調(diào)度線程池,即按一定的周期執(zhí)行任務(wù),即定時(shí)任務(wù),對(duì)ThreadPoolExecutor進(jìn)行了包裝而已。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

拒絕策略AbortPolicy

簡(jiǎn)單粗暴,直接拋出拒絕異常,這也是默認(rèn)的拒絕策略。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

CallerRunsPolicy

如果線程池未關(guān)閉,則會(huì)在調(diào)用者線程中直接執(zhí)行新任務(wù),這會(huì)導(dǎo)致主線程提交線程性能變慢。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

DiscardPolicy

從方法看沒(méi)做任務(wù)操作,即表示不處理新任務(wù),即丟棄。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

DiscardOldestPolicy

拋棄最老的任務(wù),就是從隊(duì)列取出最老的任務(wù)然后放入新的任務(wù)進(jìn)行執(zhí)行。

java高級(jí)應(yīng)用:線程池的全面講解(干貨)

如何提交線程

如可以先隨便定義一個(gè)固定大小的線程池

ExecutorService es = Executors.newFixedThreadPool(3);

提交一個(gè)線程

es.submit(xxRunnble);es.execute(xxRunnble);submit和execute分別有什么區(qū)別呢?

execute沒(méi)有返回值,如果不需要知道線程的結(jié)果就使用execute方法,性能會(huì)好很多。

submit返回一個(gè)Future對(duì)象,如果想知道線程結(jié)果就使用submit提交,而且它能在主線程中通過(guò)Future的get方法捕獲線程中的異常。

如何關(guān)閉線程池

es.shutdown();

不再接受新的任務(wù),之前提交的任務(wù)等執(zhí)行結(jié)束再關(guān)閉線程池。

es.shutdownNow();

不再接受新的任務(wù),試圖停止池中的任務(wù)再關(guān)閉線程池,返回所有未處理的線程list列表。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 深夜做爰性大片很黄很色视频 | 手机日韩理论片在线播放 | 免费看一毛一级毛片视频 | 亚洲欧美v视色一区二区 | 国产女人自拍 | 成人免费看黄网址 | 精品久久久久不卡无毒 | 国产免费久久精品99re丫y | 亚洲精品第一区二区三区 | 国产夫妇精品自在线 | 国产第一亚洲 | 影音先锋色先锋女同另类 | 久久99精品久久久久久秒播放器 | 色色视频免费网 | 欧美国产亚洲一区 | 成人国产亚洲欧美成人综合网 | 国产高清在线精品一区在线 | 日韩精品福利视频一区二区三区 | 国产系列在线播放 | 一级aaa级毛片午夜在线播放 | 免费观看性欧美一级 | 国产在线综合一区二区三区 | 91香蕉成人 | 欧美成人资源 | 国产美女一区二区在线观看 | 巨大热杵在腿间进进出出视频 | 久久综合给合久久狠狠狠97色69 | 男人天堂久久 | 香港经典a毛片免费观看爽爽影院 | 精品少妇一区二区三区视频 | 成人观看视频又黄又免费 | 看全色黄大色黄大片女图片 | 一级做α爱过程免费视频 | 精品精品国产欧美在线观看 | 久草久草在线视频 | 日韩一区二区三 | 美女操穴视频 | 国产一级毛片免 | 久草在线中文最新视频 | 国产日产久久高清欧美一区 | 亚洲免费视频网 |