《Java併發程式設計實踐——第七章(取消和關閉)》
阿新 • • 發佈:2018-11-17
取消和關閉
中斷——一種協作機制,使執行緒能夠要求另一個執行緒停止當前工作。
7.1 任務取消
當外部程式碼能夠在活動自然完成之前,把它改為完成狀態,那個這個活動被稱為可取消的。
7.1.1 中斷
執行緒中斷方法:
中斷並不會真正中斷一個正在執行的執行緒,它僅僅發出中斷請求,執行緒自己會在下一個方便的時刻中斷。
中斷是實現取消的最好選擇。
7.1.2 中斷策略
7.1.3 響應策略
7.1.5 通過Future取消
7.1.6 處理不可中斷阻塞
對於不可中斷阻塞,可以採取與中斷類似手段,來確保可以停止這些執行緒。
7.1.7用newTaskFor 封裝非標準取消
7.2 停止基於執行緒的服務
7.2.1 示例:日誌服務
日誌被分離到單獨的執行緒,構成生產者——消費者模式。
7.2.2 關閉ExecutorService
7.2.3 致命藥丸
另一種關閉生產者——消費者服務的方式是致命藥丸。
致命藥丸:一個可識別的物件,置於佇列中,當你得到它,就意味著停止工作。
7.2.4 只執行一次的服務
使用私有Executor:
7.2.3 shutdownNow的侷限性
7.3 處理反常的執行緒終止
7.3.1 未捕獲異常的處理
未捕獲的異常寫入日誌:
7.4 JVM關閉
JVM可以正常地關閉,也可以強行關閉。
7.4.1 關閉鉤子
7.4.2 精靈執行緒
7.4.3 Finalizer
避免使用Finalizer。