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

java中ThreadPoolExecutor常識匯總

 更新時(shí)間:2019年06月21日 09:16:25   作者:有愛jj  
這篇文章主要介紹了java中ThreadPoolExecutor常識匯總,線程池技術(shù)在并發(fā)時(shí)經(jīng)常會(huì)使用到,java中的線程池的使用是通過調(diào)用ThreadPoolExecutor來實(shí)現(xiàn)的,需要的朋友可以參考下

線程池技術(shù)在并發(fā)時(shí)經(jīng)常會(huì)使用到,java中的線程池的使用是通過調(diào)用ThreadPoolExecutor來實(shí)現(xiàn)的。ThreadPoolExecutor提供了四個(gè)構(gòu)造函數(shù),最后都會(huì)歸結(jié)于下面這個(gè)構(gòu)造方法:

// 七個(gè)參數(shù)的構(gòu)造函數(shù)
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)

這些參數(shù)的意義如下:

  • corePoolSize:該線程池中核心線程數(shù)最大值
  • maximumPoolSize: 該線程池中線程總數(shù)最大值
  • keepAliveTime:該線程池中非核心線程閑置超時(shí)時(shí)長
  • unit:keepAliveTime的單位
  • workQueue:阻塞隊(duì)列BlockingQueue,維護(hù)著等待執(zhí)行的Runnable對象
  • threadFactory:創(chuàng)建線程的接口,需要實(shí)現(xiàn)他的Thread newThread(Runnable r)方法。
  • RejectedExecutionHandler:飽和策略,最大線程和工作隊(duì)列容量且已經(jīng)飽和時(shí)execute方法都將調(diào)用RejectedExecutionHandler 。

ThreadPoolExecutor工作流程

流程圖如下:

大致過程陳述為:

  1. 向線程池中添加任務(wù),當(dāng)任務(wù)數(shù)量少于corePoolSize時(shí),會(huì)自動(dòng)創(chuàng)建thead來處理這些任務(wù);
  2. 當(dāng)添加任務(wù)數(shù)大于corePoolSize且少于maximmPoolSize時(shí),不在創(chuàng)建線程,而是將這些任務(wù)放到阻塞隊(duì)列中,等待被執(zhí)行;
  3. 接上面2的條件,且當(dāng)阻塞隊(duì)列滿了之后,繼續(xù)創(chuàng)建thread,從而加速處理阻塞隊(duì)列;
  4. 當(dāng)添加任務(wù)大于maximmPoolSize時(shí),根據(jù)飽和策略決定是否容許繼續(xù)向線程池中添加任務(wù),默認(rèn)的飽和策略是AbortPolicy(直接丟棄)。

線程池中使用的阻塞隊(duì)列

  • ArrayBlockingQueue:基于數(shù)組結(jié)構(gòu)的有界阻塞隊(duì)列,構(gòu)造函數(shù)一定要傳大小,F(xiàn)IFO(先進(jìn)先出);
  • LinkedBlockingQueue:無界,默認(rèn)大小65536(Integer.MAX_VALUE),當(dāng)大量請求任務(wù)時(shí),容易造成內(nèi)存耗盡。
  • SynchronousQueue:同步隊(duì)列,是一個(gè)特殊的BlockingQueue,它沒有容量(這是因?yàn)樵赟ynchronousQueue中,插入將等待另一個(gè)線程的刪除操作,反之亦然)。具體可以參考:《Java SynchronousQueue Examples(譯)》
  • PriorityBlockingQueue: 優(yōu)先隊(duì)列,無界。
  • DelayedWorkQueue:這個(gè)隊(duì)列接收到任務(wù)時(shí),首先先入隊(duì),只有達(dá)到了指定的延時(shí)時(shí)間,才會(huì)執(zhí)行任務(wù)

阻塞隊(duì)列常見的方法如下表所示:

方法名 說明 注意
add 增加一個(gè)元索 如果隊(duì)列已滿,則拋出一個(gè)IIIegaISlabEepeplian異常
remove 移除并返回隊(duì)列頭部的元素 如果隊(duì)列為空,則拋出一個(gè)NoSuchElementException異常
element 返回隊(duì)列頭部的元素 如果隊(duì)列為空,則拋出一個(gè)NoSuchElementException異常
offer 添加一個(gè)元素并返回true 如果隊(duì)列已滿,則返回false
poll 移除并返問隊(duì)列頭部的元素 如果隊(duì)列為空,則返回null
peek 返回隊(duì)列頭部的元素 如果隊(duì)列為空,則返回null
put 添加一個(gè)元素 如果隊(duì)列滿,則阻塞
take 移除并返回隊(duì)列頭部的元素 如果隊(duì)列為空,則阻塞

常見四種線程池

  • newCachedThreadPool
  • newFixedThreadPool
  • newSingleThreadExecutor
  • newScheduledThreadPool

線程池 使用的阻塞隊(duì)列 線程池大小 超時(shí)
CachedThreadPool SynchronousQueue(隊(duì)列長度無限 可增加,最大值Integer.MAX_VALUE 默認(rèn)60秒超時(shí)
FixedThreadPool LinkedBlockingQueue(隊(duì)列長度無限) 可指定nThreads,固定數(shù)量 不會(huì)超時(shí)
newSingleThreadExecutor LinkedBlockingQueue(隊(duì)列長度無限), 固定為1 不超時(shí)
newScheduledThreadPool DelayedWorkQueue 可增加,最大值Integer.MAX_VALUE 不超時(shí)

它們通過Executors以靜態(tài)方法的方式直接調(diào)用,實(shí)質(zhì)上是它們最終調(diào)用的是ThreadPoolExecutor的構(gòu)造方法,也就是本文最前面那段代碼。

注:KeepAliveTime=0的話,表示不等待

《阿里巴巴java開發(fā)手冊》中建議線程池不使用 Executors 去創(chuàng)建,而是通過 ThreadPoolExecutor的方式,這樣的處理方式讓寫的人員更加明確線程池的運(yùn)行規(guī)則,規(guī)避資源耗盡的風(fēng)險(xiǎn)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)硪黄狫ava中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java微信公眾號安全模式消息解密

    Java微信公眾號安全模式消息解密

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾號安全模式消息解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算

    Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算

    這篇文章主要為大家介紹了Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 詳解maven的setting配置文件中mirror和repository的區(qū)別

    詳解maven的setting配置文件中mirror和repository的區(qū)別

    這篇文章主要介紹了詳解maven的setting配置文件中mirror和repository的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用java實(shí)現(xiàn)BBS論壇發(fā)送郵件過程詳解

    使用java實(shí)現(xiàn)BBS論壇發(fā)送郵件過程詳解

    這篇文章主要介紹了使用java發(fā)送郵件過程詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深入解析Java設(shè)計(jì)模式編程中觀察者模式的運(yùn)用

    深入解析Java設(shè)計(jì)模式編程中觀察者模式的運(yùn)用

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中觀察者模式的運(yùn)用,觀察者模式主要是為了將對象進(jìn)行與被觀察者一樣的實(shí)現(xiàn),需要的朋友可以參考下
    2016-02-02
  • 關(guān)于fastjson的常見API詳解

    關(guān)于fastjson的常見API詳解

    這篇文章主要介紹了關(guān)于fastjson的常見API詳解,Fastjson是一個(gè)Java庫,可用于將Java對象轉(zhuǎn)換為其JSON表示,它還可用于將JSON字符串轉(zhuǎn)換為等效的Java對象,Fastjson可以處理任意Java對象,包括您沒有源代碼的預(yù)先存在的對象,需要的朋友可以參考下
    2023-07-07
  • 使用SpringMVC返回json字符串的實(shí)例講解

    使用SpringMVC返回json字符串的實(shí)例講解

    下面小編就為大家分享一篇使用SpringMVC返回json字符串的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot項(xiàng)目集成依賴Mybatis步驟

    SpringBoot項(xiàng)目集成依賴Mybatis步驟

    在本篇文章中小編給大家分享了關(guān)于SpringBoot項(xiàng)目如何集成依賴Mybatis的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-06-06
  • 在SpringBoot中配置日期格式化的方法詳解

    在SpringBoot中配置日期格式化的方法詳解

    通常情況下,發(fā)起一個(gè) Http 請求,Spring Boot 會(huì)根據(jù)請求路徑映射到指定 Controller 上的某個(gè)方法的參數(shù)上,接著,Spring 會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,對于日期類型的參數(shù),Spring 默認(rèn)是沒有配置如何將字符串轉(zhuǎn)換成日期類型的,本文將給大家介紹在SpringBoot中配置日期格式化的方法
    2023-10-10

最新評論

二连浩特市| 台前县| 松桃| 随州市| 公主岭市| 封开县| 元江| 松原市| 梅州市| 安达市| 绥宁县| 本溪| 抚宁县| 互助| 原平市| 北宁市| 前郭尔| 芒康县| 独山县| 丹巴县| 织金县| 西林县| 忻城县| 讷河市| 景东| 丹寨县| 来凤县| 壶关县| 鸡泽县| 灵山县| 沁源县| 开平市| 德清县| 石林| 建始县| 彩票| 张家界市| 琼海市| 台东县| 凤凰县| 萨迦县|