1. 程式人生 > >《Java多執行緒程式設計實戰》——第5章 Two-phase Termination(兩階段終止)模式

《Java多執行緒程式設計實戰》——第5章 Two-phase Termination(兩階段終止)模式

Two-phase Termination模式通過將停止執行緒分解為準備階段執行階段兩個階段,提供了一種通用的優雅停止執行緒的方法。
準備階段:通知目標執行緒準備進行停止。

  • 設定標誌變數。
  • 呼叫目標執行緒的interrupt方法。
  • 對於能夠對interrupt方法呼叫做出響應的方法,目標執行緒程式碼可以通過捕獲這些方法的InterruptException來偵測執行緒停止訊號。
  • 對於不對interrupt方法呼叫做出響應的方法,需要手動處理。

執行階段:檢查準備階段設定的執行緒停止標誌和訊號,在此基礎上決定執行緒停止的時機,並進行適當的“清理”操作。

類圖

使用者執行緒在系統停止過程中,如果沒有停止則會阻止JVM正常關閉。所以,在系統停止過程中我們必須主動停止使用者執行緒,而非依賴JVM。
Two-phase Termination模式使得我們可以對各種形式的目標執行緒進行優雅的停止。如目標執行緒呼叫了能夠對interrupt方法呼叫做出響應的阻塞方法、目標執行緒呼叫了不能對interrupt方法呼叫做出響應的阻塞方法、目標執行緒作為消費者處理其他執行緒生產的“產品”在其停止前需要處理完現有“產品”等。

JAVA標準庫例項

ThreadPoolExecutor