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

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

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

    新的起點 新的開始

    快樂生活 !

    深入淺出多線程(5)以并行包線程池為例說說線程池的設計需求及使用

    接深入淺出多線程系列4,
        線程對象的創建和銷毀是需要花費系統資源的,通過線程池,可以避免該問題并提高系統的響應時間。這種情形類似我們常提到的數據庫連接池。

       線程池的廣泛應用使得在SUN在JDK 1.5的工具包提供了線程池的支持。我計劃將該系列分為設計需求與設計實現兩個部分。這樣會更加清晰。如果想要熟悉,并熟練應用線程池,那么通過設計需求篇也就是該篇就可以找到答案。如果想探究實現的細節,那么在設計實現篇會有深入的說明。
       本文以Concurrent包線程池設計為例,討論線程池的設計。
    1. 線程池需求
        設計與實現的最終目標是滿足需求,這是軟件開發的基本原則。我們先考慮考慮對線程池的需求。作為一名開發人員,我們最主要的需求就是線程池簡單,易用。即使你的設計算法多么優雅,但給使用者復雜的使用步驟也是得不償失,簡單就是美!最好我們不用深究你的具體實現,通過簡單的接口就可以應用。其次就是技術角度,線程池的設計應該是比較柔性的,提供很好的可配置可管理與可擴張性。
        對于可配置可管理的需求,至少的提供以下的功能點:
    •   線程池里,線程數量的配置。
    •   能夠提供動態調整線程的數量。
    •   能夠Shutdown 最好能夠提供優雅的Shundown,而不是像我們通過切斷電源關閉機器那樣粗暴的Shutdown。
    •   能夠提供Task的狀態,比如完成了多少,還有多少沒有完成。
       對于可擴展性而言有以下幾點:
    •    如果不能滿足需要能夠很容易的擴展。
    •    對于線程池線程的創建能否提夠擴展。
    •    當提交的Task負載過大時,線程池的處理策略能否擴展。
         以上是對線程池的需求的討論。
        
      2.上面就這些對于我們使用者而言,對線程池的需求,下面我們分析Concurrent包提供的線程池是否達到了我們的需求。
          對于易用的需求。
          Concurrent的Executors類,注意不是Executor接口,通過Factory模式提供了我們以下的基本的線程池,如果沒有
          特殊的需求,只需查閱這幾個線程池JDK文檔,就可以使用了。
    •    newFixedThreadPool 顧名思義,建立固定大小的線程池。
    •    newCachedThreadPool 根據需要動態的創建線程,該線程池我們在深入系列4做了討論。
    •    newSingleThreadExecutor 如其名。
    •    newScheduledThreadPool  如其名,該線程池類似于JDK1.4 Timer提供的功能,但更完善,我會在隨后的深入淺出系列討論其不同    點。
           總之,從易用性的角度見,Concurrent包提供的接口是不錯的。
          對于可配置,可管理講:
    •    提供了可以配置線程池中線程的數量的功能。比如在創建newFixedThreadPool時,第一個參數就是線程池線程的數量,通過
    •           該數量的配置,我們就可以保證不會因為線程的過多導致系統的崩潰。
    •    提供了在運行時通過setCorePoolSize和setMaximumPoolSize方法來調整線程池數量的功能,兩者的區別會在后續實現篇中說明。
    •    提夠了優雅的Shutdown,不在接受Task,將正在運行的Task執行完,處于等待狀態的Task 中斷。
    •     提供getTaskCount和getCompletedTaskCount方法可以獲取提交的Task和完成的Task數量。
           對于可擴展性
    •     我們可以參考Executors的Factory模式,擴展提供滿足需要的線程池。
    •     在構造方法中,提供ThreadFactory接口,我們可以實現自定義的創建線程池線程的方法。
    •     提供了RejectedExecutionHandler接口,我們可以擴張該接口,提供當Task過多時,處理策略,目前默認為AbortPolicy策略Throw 一個RejectedExecutionException
           總之,Concurrent中Executors類通過Factory Method方法,提供了基本常用的線程池。 Executors 其實通過線程池實現類-ThreadPoolExecutor創建基本的線程池,所以我們可以通過ThreadPoolExecutor提供的API來配置擴展來實現個性化需求的線程池。
         

    posted on 2008-09-06 23:01 advincenting 閱讀(2003) 評論(0)  編輯  收藏


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


    網站導航:
     

    公告

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

    統計

    常用鏈接

    留言簿(13)

    隨筆分類(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類

    IT人的英語學習網站

    JAVA站點

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 丁香花在线观看免费观看| 亚洲国产成人精品女人久久久 | 你懂的网址免费国产| 亚洲国产精品线在线观看| 久久精品免费全国观看国产| 国产亚洲精品欧洲在线观看| 亚洲熟妇av一区二区三区漫画| 亚洲精品国产自在久久| 久久国产乱子精品免费女| 亚洲综合精品第一页| 亚洲中文字幕无码久久精品1 | 大陆一级毛片免费视频观看| 五月天婷婷精品免费视频| 亚洲欧洲日产专区| 五月婷婷亚洲综合| 免费观看激色视频网站(性色)| 农村寡妇一级毛片免费看视频| 亚洲黄色在线播放| 成人爽a毛片免费| 亚洲色丰满少妇高潮18p| 亚洲热妇无码AV在线播放| 毛片网站免费在线观看| 嫩草成人永久免费观看| 国产亚洲女在线线精品| 久久亚洲熟女cc98cm| 久久影院亚洲一区| 最近中文字幕mv免费高清视频7| a毛片免费在线观看| 精品免费AV一区二区三区| 91亚洲性爱在线视频| 亚洲国产精彩中文乱码AV| 免费在线观看亚洲| 免费A级毛片无码免费视| 91精品手机国产免费| 国产免费内射又粗又爽密桃视频| 亚洲中文字幕一二三四区| 亚洲视频免费播放| 亚洲第一AAAAA片| 亚洲欧洲美洲无码精品VA| 亚洲成AV人网址| 欧洲美熟女乱又伦免费视频|