實現了多線程池的類庫:threadpool4j
在軟件架構和設計中,會盡可能地將操作異步化
,縮短響應時間,提升性能。
將異步任務放入線程池
,這是許多人都知道的。但是當異步任務多了之后,如果全放在同一個線程池執行,會出現一些問題:
- 不同任務因其執行的操作不同,所需時間不同。如果有大量執行時間較久的異步任務,會阻塞那些執行非常快的異步任務,導致原本很快可以完成的異步任務也變慢。
- 操作本地內容的異步任務和操作遠程內容的異步任務。如果放在同一個線程池中,在網絡出現故障的情況下,會出現大量的任務積壓,導致執行本地內容的異步任務也受影響。
現實生活中,機動車行駛時,會根據行駛的速度劃分超車道、快車道、慢車道和應急車道,避免速度慢的車輛阻塞速度快的車輛。
同理,將異步任務放入不同的線程池執行,就可以解決上面的兩個問題。
threadpool4j
是一個實現了多線程池
的類庫,解決了上述的問題。可指定不同的異步任務在不同的線程池中運行,不同的線程池可配置不同大小。詳細的特性說明如下:
特性
1、模塊穩定。
- 已在實際的業務中應用,使用多線程池模塊每天執行超過3億個異步任務,運行穩定。
2、支持多個線程池。
- 每個線程池有獨立的名稱,可配置不同的線程數。
- 業務可根據異步任務的操作,將它們分發至不同的線程池,避免將所有的異步任務放在一個池中相互影響。
3、完善的統計和健康狀態信息。
-
每分鐘輸出一次各個線程池的執行任務數和隊列積壓情況。
[2014-07-08 18:05:54] ~ ThreadPool:default, ActiveThread:0, TotalTask:327563397, CompletedTask:327563397, Queue:0 [2014-07-08 18:05:54] ~ ThreadPool:outer, ActiveThread:0, TotalTask:7033787, CompletedTask:7033787, Queue:0 [2014-07-08 18:05:54] ~ ThreadPool:account, ActiveThread:0, TotalTask:17359, CompletedTask:17359, Queue:0 [2014-07-08 18:05:54] ~ ThreadPool:channel, ActiveThread:0, TotalTask:7037913, CompletedTask:7037913, Queue:0
-
每分鐘輸出一次各個線程池的線程狀態信息。
[2014-07-08 17:36:58] ~ ThreadGroup:channel-pool, New:0, Runnable:0, Blocked:0, Waiting:30, TimedWaiting:0, Terminated:0 [2014-07-08 17:36:58] ~ ThreadGroup:outer-pool, New:0, Runnable:0, Blocked:0, Waiting:10, TimedWaiting:0, Terminated:0 [2014-07-08 17:36:58] ~ ThreadGroup:account-pool, New:0, Runnable:0, Blocked:0, Waiting:30, TimedWaiting:0, Terminated:0 [2014-07-08 17:36:58] ~ ThreadGroup:default-pool, New:0, Runnable:1, Blocked:0, Waiting:29, TimedWaiting:1, Terminated:0
-
輸出的日志信息對統計程序和統計腳本友好,容易切分。
4、使用和配置簡單。
- 從多線程池模塊復制biz/threadpool4j.xml配置文件,然后根據項目的實際需要簡單修改即可(簡單的項目不修改亦可使用)。
- 只需一行代碼就可以執行異步任務。
5、初始化和關閉所有線程池簡單。
- 應用啟動時,執行一行代碼可初始化配置文件中所有的線程池。
- 應用關閉時,執行一行代碼可安全地關閉所有的線程池。
6、無框架依賴性。
- 不依賴特定的框架,適用于所有使用Java語言的應用。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!