Java高性能編程實戰 - 線程終止

1 虛假的線程中止- Stop

Stop:中止線程,並且清除監控器鎖的信息,但是可能導致線程安全問題,JDK不建議用。
Destroy: JDK未實現該方法

  • 理想輸出

i=0 j=0

  • 程序執行結果

沒有保證同步代碼塊裏面數據的一致性,破壞了線程安全

2 真正的線程終止

2.1 interrupt

如果目標線程在調用Object class 的

  • wait()

  • wait(long)

  • wait(long, int)

或者Thread類的

  • join()

  • join(long, int)

  • sleep(long, int)

時被阻塞,那麼Interrupt會生效, 該線程的中斷狀態將被清除,拋InterruptedException

如果目標線程是被I/O或者NIO中的Channel所阻塞,同樣,I/O操作會被中斷或者返回特殊異常值。達到終止線程的目的。

如果以上條件都不滿足,則會設置此線程的中斷狀態。
對於上面的示例

  • stop改成interrupt

  • 最終輸出爲“i=1 j=1”,數據一致

2.2 標誌位

  • 即代碼中,增加一個判斷,來控制線程執行的中止
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章