1. 程式人生 > >《Java多執行緒程式設計實戰》—— 第8章 Active Object(主動物件)模式

《Java多執行緒程式設計實戰》—— 第8章 Active Object(主動物件)模式

Active Object模式是一種非同步程式設計模式。(跟Promise模式有什麼區別呢?
通過對方法的呼叫與方法的執行進行解耦來提高併發性。

類圖

當Active Object模式對外暴露的非同步方法被呼叫時,與該方法呼叫相關的上下文資訊,包括被呼叫的非同步方法名、引數等,會被封裝成一個物件。該方法請求物件會被存入緩衝區中,由專門的工作者執行緒負責執行。
錯誤隔離:一個任務的處理失敗不影響其他任務的處理
ThreadPoolExecutor提供的緩衝區飽和處理策略:

  • AbortPolicy:丟擲異常
  • DiscardPolicy:丟棄被拒絕的任務,不丟擲異常
  • DiscardOldestPolicy:丟棄最老的任務
  • CallerRunsPolicy:在任務的提交執行緒中執行被拒絕的任務

當其最大執行緒池大小大於核心執行緒池大小時,工作佇列滿的情況下,新提交的任務會用核心執行緒之外的新增執行緒來執行,直到工作者執行緒數達到最大執行緒數時,新提交的任務才會執行拒絕策略。
(核心執行緒->佇列->最大執行緒->拒絕策略)