最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程池實(shí)現(xiàn)原理總結(jié)

 更新時(shí)間:2022年01月27日 09:07:17   作者:負(fù)債程序猿  
這篇文章主要給大家分享的是Java線程池實(shí)現(xiàn)原理總結(jié),線程池參數(shù)、線程池執(zhí)行流程等內(nèi)容上總結(jié),具有一定參考戒指,需要的小伙伴可以參考一下,希望對(duì)你有所幫助

要理解實(shí)現(xiàn)原理,必須把線程池的幾個(gè)參數(shù)徹底搞懂,不要死記硬背

一、線程池參數(shù)

  • 1、corePoolSize(必填):核心線程數(shù)。
  • 2、maximumPoolSize(必填):最大線程數(shù)。
  • 3、keepAliveTime(必填):線程空閑時(shí)長(zhǎng)。如果超過(guò)該時(shí)長(zhǎng),非核心線程就會(huì)被回收。
  • 4、unit(必填):指定keepAliveTime的時(shí)間單位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。
  • 5、workQueue(必填):任務(wù)隊(duì)列。通過(guò)線程池的execute()方法提交的Runnable對(duì)象將存儲(chǔ)在該隊(duì)列中。
  • 6、threadFactory(可選):線程工廠。一般就用默認(rèn)的。
  • 7、handler(可選):拒絕策略。當(dāng)線程數(shù)達(dá)到最大線程數(shù)時(shí)就要執(zhí)行飽和策略。

說(shuō)下核心線程數(shù)和最大線程數(shù)的區(qū)別

拒絕策略可選值:

1、AbortPolicy(默認(rèn)):放棄任務(wù)并拋出RejectedExecutionException異常。
2、CallerRunsPolicy:由調(diào)用線程處理該任務(wù)。
3、DiscardPolicy:放棄任務(wù),但是不拋出異常??梢耘浜线@種模式進(jìn)行自定義的處理方式。
4、DiscardOldestPolicy:放棄隊(duì)列最早的未處理任務(wù),然后重新嘗試執(zhí)行任務(wù)。

二、線程池執(zhí)行流程

上個(gè)流程圖,先試著自己看下能不能看懂

簡(jiǎn)短的總結(jié)下線程池執(zhí)行流程:

  • 1、一個(gè)任務(wù)提交到線程池后,如果當(dāng)前的線程數(shù)沒(méi)達(dá)到核心線程數(shù),則新建一個(gè)線程并且執(zhí)行新任務(wù),注意一點(diǎn),這個(gè)新任務(wù)執(zhí)行完后,該線程不會(huì)被銷(xiāo)毀;
  • 2、如果達(dá)到了,則判斷任務(wù)隊(duì)列滿(mǎn)了沒(méi),如果沒(méi)滿(mǎn),則將任務(wù)放入任務(wù)隊(duì)列;
  • 3、如果滿(mǎn)了,則判斷當(dāng)前線程數(shù)量是否達(dá)到最大線程數(shù),如果沒(méi)達(dá)到,則創(chuàng)建新線程來(lái)執(zhí)行任務(wù),注意,如果線程池中線程數(shù)量大于核心線程數(shù),每當(dāng)有線程超過(guò)了空閑時(shí)間,就會(huì)被銷(xiāo)毀,直到線程數(shù)量不大于核心線程數(shù);
  • 4、如果達(dá)到了最大線程數(shù),并且任務(wù)隊(duì)列滿(mǎn)了,就會(huì)執(zhí)行飽和策略;

三、四種現(xiàn)成的線程池

不想自己new線程池的話,可以用現(xiàn)成的

1、定長(zhǎng)線程池(FixedThreadPool)

特點(diǎn):只有核心線程,線程數(shù)量固定,執(zhí)行完立即回收,任務(wù)隊(duì)列為鏈表結(jié)構(gòu)的有界隊(duì)列。
應(yīng)用場(chǎng)景:控制線程最大并發(fā)數(shù)

2、定時(shí)線程池(ScheduledThreadPool )

特點(diǎn):核心線程數(shù)量固定,非核心線程數(shù)量無(wú)限,執(zhí)行完閑置10ms后回收,任務(wù)隊(duì)列為延時(shí)阻塞隊(duì)列。
應(yīng)用場(chǎng)景:執(zhí)行定時(shí)或周期性的任務(wù)。

3、可緩存線程池(CachedThreadPool)

特點(diǎn):無(wú)核心線程,非核心線程數(shù)量無(wú)限,執(zhí)行完閑置60s后回收,任務(wù)隊(duì)列為不存儲(chǔ)元素的阻塞隊(duì)列。
應(yīng)用場(chǎng)景:執(zhí)行大量、耗時(shí)少的任務(wù)。

4、單線程化線程池(SingleThreadExecutor)

特點(diǎn):只有1個(gè)核心線程,無(wú)非核心線程,執(zhí)行完立即回收,任務(wù)隊(duì)列為鏈表結(jié)構(gòu)的有界隊(duì)列。
應(yīng)用場(chǎng)景:不適合并發(fā)但可能引起IO阻塞性及影響UI線程響應(yīng)的操作,如數(shù)據(jù)庫(kù)操作、文件操作等。

上述四個(gè)線程池雖然方便,但是阿里巴巴規(guī)范明確說(shuō)明不建議使用,因?yàn)榭赡軙?huì)造成內(nèi)存溢出,具體原因如下:

FixedThreadPoolSingleThreadExecutor:主要問(wèn)題是堆積的請(qǐng)求處理隊(duì)列均采用LinkedBlockingQueue,可能會(huì)耗費(fèi)非常大的內(nèi)存,嚴(yán)重的直接導(dǎo)致內(nèi)存溢出。
CachedThreadPoolScheduledThreadPool:主要問(wèn)題是它們的最大線程數(shù)是Integer.MAX_VALUE,可能會(huì)創(chuàng)建數(shù)量非常多的線程,嚴(yán)重的直接導(dǎo)致內(nèi)存溢出。

到此這篇關(guān)于Java線程池實(shí)現(xiàn)原理總結(jié)的文章就介紹到這了,更多相關(guān)線程池實(shí)現(xiàn)原理總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java解壓zip文件示例

    java解壓zip文件示例

    這篇文章主要介紹了java解壓zip文件示例,在獲得一個(gè)以Zip格式壓縮的文件之后,需要將其進(jìn)行解壓縮,還原成壓縮前的文件,下面是代碼示例
    2014-03-03
  • SpringBoot?Bean實(shí)例化流程解析

    SpringBoot?Bean實(shí)例化流程解析

    在SpringBoot啟動(dòng)過(guò)程中會(huì)執(zhí)行refreshContext()方法,而在其執(zhí)行過(guò)程中,又會(huì)調(diào)用finishBeanFactoryInitialization()方法,該方法負(fù)責(zé)了Bean的實(shí)例化,那么本文將從源碼跟讀的角度來(lái)解析一下具體流程
    2023-08-08
  • Spring框架整合Java Web Token問(wèn)題

    Spring框架整合Java Web Token問(wèn)題

    這篇文章主要介紹了Spring框架整合Java Web Token問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java線程池7個(gè)參數(shù)的含義

    Java線程池7個(gè)參數(shù)的含義

    這篇文章主要介紹了Java線程池7個(gè)參數(shù)的含義,所謂的線程池的?7?大參數(shù)是指,在使用?ThreadPoolExecutor?創(chuàng)建線程池時(shí)所設(shè)置的?7?個(gè)參數(shù),下文更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 深入解析Java的設(shè)計(jì)模式編程中的模板方法模式

    深入解析Java的設(shè)計(jì)模式編程中的模板方法模式

    這篇文章主要介紹了深入解析Java的設(shè)計(jì)模式編程中的模板方法模式, 模版方法模式由一個(gè)抽象類(lèi)和一個(gè)(或一組)實(shí)現(xiàn)類(lèi)通過(guò)繼承結(jié)構(gòu)組成,需要的朋友可以參考下
    2016-02-02
  • 淺談Java中幾個(gè)常用集合添加元素的效率

    淺談Java中幾個(gè)常用集合添加元素的效率

    下面小編就為大家?guī)?lái)一篇淺談Java中幾個(gè)常用集合添加元素的效率。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 完整詳解Java開(kāi)發(fā)學(xué)習(xí)路線指南

    完整詳解Java開(kāi)發(fā)學(xué)習(xí)路線指南

    在本篇文章里小編給大家整理的是一篇關(guān)于Java開(kāi)發(fā)學(xué)習(xí)路線以及期中的主要知識(shí)點(diǎn)內(nèi)容,有興趣的朋友么可以學(xué)習(xí)下。
    2022-11-11
  • java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    部分與整體以某種形式相似的形,稱(chēng)為分形,科赫曲線是一種外形像雪花的幾何曲線,所以又稱(chēng)為雪花曲線,它是分形曲線中的一種,畫(huà)法如下
    2013-12-12
  • 使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑記錄

    使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑記錄

    這篇文章主要介紹了使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 如何使用Java語(yǔ)言編寫(xiě)打地鼠游戲全過(guò)程

    如何使用Java語(yǔ)言編寫(xiě)打地鼠游戲全過(guò)程

    打地鼠是我們非常熟悉的一款小游戲,它的游戲結(jié)構(gòu)和規(guī)則也都比較簡(jiǎn)單,那么如果能夠親自徒手開(kāi)發(fā)這樣的一款經(jīng)典小游戲呢?這篇文章主要給大家介紹了關(guān)于如何使用Java語(yǔ)言編寫(xiě)打地鼠游戲的相關(guān)資料,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

历史| 洛川县| 黑水县| 乌苏市| 湘潭县| 德江县| 田林县| 湘阴县| 八宿县| 海口市| 绥棱县| 岳阳县| 康保县| 大冶市| 博乐市| 兰考县| 商洛市| 博白县| 从江县| 如皋市| 庆云县| 贞丰县| 松桃| 札达县| 鄂尔多斯市| 迁西县| 海兴县| 海林市| 安远县| 高雄市| 洛川县| 固阳县| 贵德县| 佛冈县| 佛冈县| 永城市| 榆社县| 永新县| 贵南县| 盐源县| 夏河县|