《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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章