1. 程式人生 > >《Java併發程式設計實踐——第七章(取消和關閉)》

《Java併發程式設計實踐——第七章(取消和關閉)》

取消和關閉

中斷——一種協作機制,使執行緒能夠要求另一個執行緒停止當前工作。

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。