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

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

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

    新的起點 新的開始

    快樂生活 !

    深入淺出多線程(6)分析并行包線程池的設計與實現

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


    這其實是線程池設計處理Task的策略。大家可以細細體會,這個策略的優勢。
        到現在其實已經基本說明了ThreadPoolExecutor的設計了,其實設計思想是不是跟以前我們自個設計線程池都一樣?只是在具體實現上更加完善,更加完美!
    對了大家如果感興趣可以看看ThreadPoolExecutor如何優雅的Shutdown,這些設計實現細節,都可以在我們的實踐中應用。

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

    評論

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

    corePoolSize 初始化時線程池中線程的數量。
    maximumPoolSize 線程池中的程的最大數量,當Task無法插入Task隊列,線程池線程數量又達到maximumPoolSize時,啟用Reject策略,

    這個Task隊列的空間大小是多少?maximumPoolSize - corePoolSize 的差值嗎?
    謝謝  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    公告

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

    統計

    常用鏈接

    留言簿(13)

    隨筆分類(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類

    IT人的英語學習網站

    JAVA站點

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久一区二区免费播放| 亚洲av永久无码精品表情包| 久久国产色AV免费看| 亚洲国产成人久久77| 亚洲区小说区图片区QVOD| 久久久久亚洲AV成人网| 亚洲开心婷婷中文字幕| 国产亚洲综合一区柠檬导航| 亚洲狠狠婷婷综合久久久久| 亚洲今日精彩视频| 亚洲制服丝袜第一页| 免费的黄色网页在线免费观看| 色哟哟国产精品免费观看| 中文字幕一区二区免费| 最近免费中文字幕大全高清大全1| 我们的2018在线观看免费高清| 午夜私人影院免费体验区| 亚洲精品线路一在线观看| 亚洲v高清理论电影| 精品久久久久久亚洲精品| 美女又黄又免费的视频| 24小时日本电影免费看| 1区2区3区产品乱码免费| 大地资源在线资源免费观看| 中文在线观看国语高清免费| 99精品视频在线观看免费| 中文字幕免费在线播放| a级毛片毛片免费观看永久| rh男男车车的车车免费网站| 国产成人无码区免费网站| 免费国产99久久久香蕉| 成人在线视频免费| 久久亚洲AV无码西西人体| 亚洲中文字幕AV在天堂| 免费在线观影网站| 国产精品无码免费视频二三区| 亚洲欧洲无码AV电影在线观看 | 亚洲人成77777在线播放网站| 亚洲免费视频网址| 本免费AV无码专区一区| 成人毛片免费观看视频|