實現了多線程池的類庫:threadpool4j

jopen 10年前發布 | 19K 次閱讀 Java開發 threadpool4j

在軟件架構和設計中,會盡可能地將操作異步化,縮短響應時間,提升性能。

將異步任務放入線程池,這是許多人都知道的。但是當異步任務多了之后,如果全放在同一個線程池執行,會出現一些問題:

  • 不同任務因其執行的操作不同,所需時間不同。如果有大量執行時間較久的異步任務,會阻塞那些執行非常快的異步任務,導致原本很快可以完成的異步任務也變慢。
  • 操作本地內容的異步任務和操作遠程內容的異步任務。如果放在同一個線程池中,在網絡出現故障的情況下,會出現大量的任務積壓,導致執行本地內容的異步任務也受影響。

現實生活中,機動車行駛時,會根據行駛的速度劃分超車道、快車道、慢車道和應急車道,避免速度慢的車輛阻塞速度快的車輛。

687474703a2f2f696d67302e70682e3132362e6e65742f4a675574537a6864416174675f3542356d6e65304b513d3d2f363630383431343532373633313738313335312e706e67.png

同理,將異步任務放入不同的線程池執行,就可以解決上面的兩個問題。

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語言的應用。

項目主頁:http://www.baiduhome.net/lib/view/home/1416810122758

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!