xylz,imxylz

          關注后端架構、中間件、分布式和并發編程

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

          01 2011 檔案

               摘要: 我們根據線程池的要求也很能夠猜測出其數據結構出來。
          線程池需要支持多個線程并發執行,因此有一個線程集合Collection來執行線程任務;
          涉及任務的異步執行,因此需要有一個集合來緩存任務隊列Collection
          很顯然在多個線程之間協調多個任務,那么就需要一個線程安全的任務集合,同時還需要支持阻塞、超時操作,那么BlockingQueue是必不可少的;
          既然是線程池,出發點就是提高系統性能同時降低資源消耗,那么線程池的大小就有限制,因此需要有一個核心線程池大小(線程個數)和一個最大線程池大小(線程個數),有一個計數用來描述當前線程池大小;
          如果是有限的線程池大小,那么長時間不使用的線程資源就應該銷毀掉,這樣就需要一個線程空閑時間的計數來描述線程何時被銷毀;
          前面描述過線程池也是有生命周期的,因此需要有一個狀態來描述線程池當前的運行狀態;
          線程池的任務隊列如果有邊界,那么就需要有一個任務拒絕策略來處理過多的任務,同時在線程池的銷毀階段也需要有一個任務拒絕策略來處理新加入的任務;
          上面種  閱讀全文
          posted @ 2011-01-18 23:43 imxylz 閱讀(16087) | 評論 (6)  編輯

               摘要: 在JDK 5.0之前,java.util.Timer/TimerTask是唯一的內置任務調度方法,而且在很長一段時間里很熱衷于使用這種方式進行周期性任務調度。
          首先研究下Timer/TimerTask的特性(至于javax.swing.Timer就不再研究了)。
          上面三段代碼反映了Timer/TimerTask的以下特性:
          Timer對任務的調度是基于絕對時間的。
          所有的TimerTask只有一個線程TimerThread來執行,因此同一時刻只有一個TimerTask在執行。
          任何一個TimerTask的執行異常都會導致Timer終止所有任務。
          由于基于絕對時間并且是單線程執行,因此在多個任務調度時,長時間執行的任務被執行后有可能導致短時間任務快速在短時間內被執行多次或者干脆丟棄多個任務。  閱讀全文
          posted @ 2011-01-10 23:39 imxylz 閱讀(14458) | 評論 (32)  編輯

               摘要: 上一節中提到關閉線程池過程中需要對新提交的任務進行處理。這個是java.util.concurrent.RejectedExecutionHandler處理的邏輯。

          在沒有分析線程池原理之前先來分析下為什么有任務拒絕的情況發生。
          這里先假設一個前提:線程池有一個任務隊列,用于緩存所有待處理的任務,正在處理的任務將從任務隊列中移除。因此在任務隊列長度有限的情況下就會出現新任務的拒絕處理問題,需要有一種策略來處理應該加入任務隊列卻因為隊列已滿無法加入的情況。另外在線程池關閉的時候也需要對任務加入隊列操作進行額外的協調處理。

          RejectedExecutionHandler提供了四種方式來處理任務拒絕策略。  閱讀全文
          posted @ 2011-01-08 22:47 imxylz 閱讀(9976) | 評論 (0)  編輯

               摘要: 本著開發的原則,既然用到了別人家的東西,所以決定公開出來,也算是給別人一個參考。  閱讀全文
          posted @ 2011-01-05 10:00 imxylz 閱讀(4600) | 評論 (1)  編輯

               摘要:
          我們知道線程是有多種執行狀態的,同樣管理線程的線程池也有多種狀態。JVM會在所有線程(非后臺daemon線程)全部終止后才退出,為了節省資源和有效釋放資源關閉一個線程池就顯得很重要。有時候無法正確的關閉線程池,將會阻止JVM的結束。
          線程池Executor是異步的執行任務,因此任何時刻不能夠直接獲取提交的任務的狀態。這些任務有可能已經完成,也有可能正在執行或者還在排隊等待執行。因此關閉線程池可能出現一下幾種情況:
          平緩關閉:已經啟動的任務全部執行完畢,同時不再接受新的任務
          立即關閉:取消所有正在執行和未執行的任務
          另外關閉線程池后對于任務的狀態應該有相應的反饋信息。  閱讀全文
          posted @ 2011-01-04 22:54 imxylz 閱讀(12580) | 評論 (6)  編輯


          ©2009-2014 IMXYLZ
          主站蜘蛛池模板: 华宁县| 清原| 花莲县| 阿坝县| 通城县| 土默特右旗| 西乡县| 崇文区| 襄垣县| 镇远县| 嘉峪关市| 依兰县| 滨海县| 绥中县| 株洲市| 信丰县| 峡江县| 哈尔滨市| 凤阳县| 陇南市| 开平市| 舒城县| 霍城县| 铜鼓县| 云林县| 涡阳县| 麻江县| 湘西| 余江县| 尼玛县| 翁牛特旗| 新津县| 盘锦市| 公主岭市| 旬邑县| 凯里市| 长阳| 肃南| 北京市| 措美县| 黄龙县|