以下代碼示例:t執行緒啟動后不間斷的對x,y自增,main執行緒睡眠3秒,然后t執行緒呼叫自己的stop(),停止執行緒isAlive()查看執行緒是否存活,如果執行緒死亡則while回圈結束,列印x,y的值,列印的負數值不是重點,重點是,x,y的值不一樣,這表示,stop方法會強制中斷執行緒,這使得我們的程式不安全,

將stop()替換成interrupt()這個方法不會停止執行緒,只是修改執行緒自身的中斷信號量為true,讓用戶自己根據信號量去判斷執行緒是否要執行結束,在run()方法中,while的條件改為isInterrupted(),如果執行緒的中斷信號量為true,則停止回圈,但是回圈內部的代碼會執行結束,最后t執行緒結束后,x,y的值相同,

需要注意的是,在一些特殊情況下,interrupt()是不生效的,不會更改執行緒本身的中斷信號量,

從結果看執行緒t執行緒的while回圈并沒有終止,但是捕獲了一個InterruptedException

interrupted同樣判斷執行緒是否中斷,如果中斷回傳true,沒有中斷回傳false,但是無論執行緒是否是中斷狀態,它都會將執行緒的中斷狀態清除,



轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174656.html
標籤:Java
