<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    新的起點(diǎn) 新的開(kāi)始

    快樂(lè)生活 !

    深入淺出多線程(6)分析并行包線程池的設(shè)計(jì)與實(shí)現(xiàn)

     接上篇,在上篇中介紹了線程池的設(shè)計(jì)需求以及使用,在這里我們分析Concurrent包中線程池的實(shí)現(xiàn)類(lèi)ThreadPoolExecutor的設(shè)計(jì),是不是感覺(jué)沒(méi)意義,人家都實(shí)現(xiàn)了還分析啥?當(dāng)然是提高我們自身的設(shè)計(jì)能力了。對(duì)于設(shè)計(jì)能力的提高,我認(rèn)為一方面我們要在具體實(shí)踐中,能夠?qū)W習(xí)前人
    總結(jié)的設(shè)計(jì)思想(比如設(shè)計(jì)模式之類(lèi)的),根據(jù)具體上下文,能夠融會(huì)貫通的使用他們。另一方面分析優(yōu)秀的框架設(shè)計(jì)與實(shí)現(xiàn)也是很好的方式,當(dāng)然JDK設(shè)計(jì)是最好的學(xué)習(xí)資料。閑話(huà)多了,切入主題,設(shè)計(jì)要點(diǎn):
    1.     縱觀在JDK1.5以前我們自己實(shí)現(xiàn)的線程池,還是Concurrent提供的線程池,在線程池中首先我們要兩個(gè)容器維護(hù)    線程池中的線程 與     提交給線程池中的Task。
    2.     線程池與Task如何關(guān)聯(lián),什么樣的Task才可以提交的該線程池中執(zhí)行呢。所以我們要定義一個(gè)接口,分離線程池與具體
    3.     Task的耦合關(guān)系,ThreadPoolExecutor可以接受實(shí)現(xiàn)Runnable接口或者Callable接口(其實(shí)最后也是組裝為Runnable接口)的具體Task。
    4.    線程池中的線程從Task隊(duì)列中去Task執(zhí)行。
        以上就是線程池設(shè)計(jì)的要點(diǎn)。
        在ThreadPoolExecutor中,有一個(gè)內(nèi)部類(lèi)Worker,實(shí)現(xiàn)了Runnable,也就是線程池中的線程,不言而喻,它的Run方法就是從Task隊(duì)列
       取Task,調(diào)用Task的run方法(Task 是實(shí)現(xiàn)了Runnable接口的),執(zhí)行Task,依次類(lèi)推,直到?jīng)]有隊(duì)列里面Task??聪聢D
         了解了線程的創(chuàng)建以及執(zhí)行Task的流程,下面讓我們?cè)诳纯碩hreadPoolExecutor是如何觸發(fā)創(chuàng)建線程池線程的呢? 何時(shí)啟動(dòng)線程池里的
    線程執(zhí)行Task呢?再這之前,我們先說(shuō)明一下,在ThreadPoolExecutor中引入了兩個(gè)描述線程池中線程數(shù)量的屬性,corePoolSize和         maximumPoolSize
         corePoolSize 初始化時(shí)線程池中線程的數(shù)量。
        maximumPoolSize 線程池中的程的最大數(shù)量,當(dāng)Task無(wú)法插入Task隊(duì)列,線程池線程數(shù)量又達(dá)到maximumPoolSize時(shí),啟用Reject策略,
        Reject過(guò)多的Task。
    下圖說(shuō)明了當(dāng)我們創(chuàng)建一個(gè)線程池,并提交Task時(shí),ThreadPoolExecutor首先判斷是否達(dá)到corePoolSize,沒(méi)有就在創(chuàng)建一個(gè)線程,提高吞吐量。如果超過(guò)那么直接將該Task插入Task隊(duì)列。
    如果插入失敗,說(shuō)明Task隊(duì)列已滿(mǎn),那么嘗試是否達(dá)到maximumPoolSize,如果沒(méi)有,那么創(chuàng)建而外的線程處理改
    Task,減低Task失敗率。
    如果已經(jīng)達(dá)到了maximumPoolSize,對(duì)不起,只能Reject了。


    這其實(shí)是線程池設(shè)計(jì)處理Task的策略。大家可以細(xì)細(xì)體會(huì),這個(gè)策略的優(yōu)勢(shì)。
        到現(xiàn)在其實(shí)已經(jīng)基本說(shuō)明了ThreadPoolExecutor的設(shè)計(jì)了,其實(shí)設(shè)計(jì)思想是不是跟以前我們自個(gè)設(shè)計(jì)線程池都一樣?只是在具體實(shí)現(xiàn)上更加完善,更加完美!
    對(duì)了大家如果感興趣可以看看ThreadPoolExecutor如何優(yōu)雅的Shutdown,這些設(shè)計(jì)實(shí)現(xiàn)細(xì)節(jié),都可以在我們的實(shí)踐中應(yīng)用。

    posted on 2008-09-06 23:14 advincenting 閱讀(2366) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: 深入淺出多線程(6)分析并行包線程池的設(shè)計(jì)與實(shí)現(xiàn) 2009-03-27 14:46 wavefly

    corePoolSize 初始化時(shí)線程池中線程的數(shù)量。
    maximumPoolSize 線程池中的程的最大數(shù)量,當(dāng)Task無(wú)法插入Task隊(duì)列,線程池線程數(shù)量又達(dá)到maximumPoolSize時(shí),啟用Reject策略,

    這個(gè)Task隊(duì)列的空間大小是多少?maximumPoolSize - corePoolSize 的差值嗎?
    謝謝  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    公告

    Locations of visitors to this pageBlogJava
  • 首頁(yè)
  • 新隨筆
  • 聯(lián)系
  • 聚合
  • 管理
  • <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    統(tǒng)計(jì)

    常用鏈接

    留言簿(13)

    隨筆分類(lèi)(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類(lèi)

    IT人的英語(yǔ)學(xué)習(xí)網(wǎng)站

    JAVA站點(diǎn)

    優(yōu)秀個(gè)人博客鏈接

    官網(wǎng)學(xué)習(xí)站點(diǎn)

    生活工作站點(diǎn)

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久亚洲精品无码av| 1000部羞羞禁止免费观看视频| 亚洲精品无码专区久久久| 久久午夜夜伦鲁鲁片免费无码| 久久久久精品国产亚洲AV无码| 又爽又高潮的BB视频免费看 | 亚洲男人天堂2020| 久操免费在线观看| 亚洲天然素人无码专区| 久久久久亚洲爆乳少妇无 | 四虎影视永久免费观看地址| 国产免费无码一区二区 | 99在线精品视频观看免费| 人妻免费久久久久久久了| a级成人免费毛片完整版| 日韩免费视频播放| 国产免费无码AV片在线观看不卡| 亚洲三级中文字幕| 国产成人精品日本亚洲专区| 97视频免费在线| 中文字幕无线码中文字幕免费| 亚洲一区二区三区91| 久久亚洲国产成人影院网站| 成年性午夜免费视频网站不卡| a在线视频免费观看在线视频三区| 亚洲激情校园春色| 亚洲综合无码AV一区二区| 拍拍拍又黄又爽无挡视频免费| 国产免费无码一区二区| 另类小说亚洲色图| 亚洲av无码片区一区二区三区| 亚洲精品少妇30p| 免费吃奶摸下激烈视频| 欧美最猛性xxxxx免费| 久久99免费视频| 一级做a爰片久久毛片免费陪 | 国产va免费精品| 粉色视频在线观看www免费| 亚洲人成网站在线观看播放青青| 国产精品亚洲片在线观看不卡 | 涩涩色中文综合亚洲|