Thread中interrupted()方法和isInterrupted()方法區別總結

interrupted()源碼

isInterrupted()源碼

interrupted()是靜態方法:內部實現是調用的當前線程的isInterrupted(),並且會重置當前線程的中斷狀態

 

isInterrupted()是實例方法,是調用該方法的對象所表示的那個線程的isInterrupted(),不會重置當前線程的中斷狀態

 

 

測試方法驗證:

1.    

第一個紅框中斷的線程是我們自己創建的myThread線程,我調用的interrupted(),由上面源碼可知是判斷當前線程的中斷狀態,當前線程是main線程,我根本沒有中斷過main線程,所以2次調用均返回“false”

 

 

 

2.

第一個紅框中斷的線程是當前線程(main線程),我調用的interrupted(),由上面源碼可知是判斷當前線程的中斷狀態,當前線程是main線程,所以第1次調用結果返回“true”,因爲我確實中斷了main線程,

 

由源碼可知interrupted()調用的是isInterrupted(),並會重置中斷狀態,所以第一次調用之後把中斷狀態給重置了,從中斷狀態重置爲非中斷狀態,所以第2次調用的結果返回“false”

 

 

3.

第一個紅框中斷的線程是我們自己創建的myThread線程,我調用的isInterrupted(),由上面源碼可知是判斷執行該方法的對象所表示線程的中斷狀態,也就是myThread引用所表示的線程的中斷狀態,所以第1次調用結果返回“true”,

 

由源碼可知isInterrupted()不會重置中斷狀態,所以第一次調用之後沒有把中斷狀態給重置(從中斷狀態重置爲非中斷狀態),所以第2次調用的結果還返回“true”

 

 

 

 

 

 

4.

第一個紅框中斷的線程是我們自己創建的myThread線程,我調用的isInterrupted(),由上面源碼可知是判斷執行該方法的對象所表示線程的中斷狀態,也就是main的中斷狀態,我壓根沒有中斷main線程,所以理所當然2次調用結果都返回“false”

 

 

5.

第一個紅框中斷的線程是當前線程(main線程),我調用的isInterrupted(),由上面源碼可知是判斷執行該方法的對象所表示線程的中斷狀態,也就是main的中斷狀態,所以第1次調用結果返回“true”,

因爲源碼內部調用isInterrupted() 參數傳的false,不會重置main線程的中斷狀態,所以第2次調用還是返回”true”

 

 


原文:https://blog.csdn.net/zhuyong7/article/details/80852884 

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