日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

多线程:interrupted、isinterrupted区别

發(fā)布時間:2025/3/21 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程:interrupted、isinterrupted区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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


結論:interrupt方法是用于中斷線程的,調用該方法的線程的狀態(tài)將被置為"中斷"狀態(tài)。注意:線程中斷僅僅是設置線程的中斷狀態(tài)位,不會停止線程。所以當一個線程處于中斷狀態(tài)時,如果再由wait、sleep以及jion三個方法引起的阻塞,那么JVM會將線程的中斷標志重新設置為false,并拋出一個InterruptedException異常(有人會問,問什么清除標志?因為我都拋出異常了,我的狀態(tài)標識位的使命已經完成了,剩下的就由程序員處理了。因此,清除標志位),然后開發(fā)人員可以中斷狀態(tài)位“的本質作用-----就是程序員根據try-catch功能塊捕捉jvm拋出的InterruptedException異常來做各種處理,比如如何退出線程。總之interrupt的作用就是需要用戶自己去監(jiān)視線程的狀態(tài)位并做處理。”

?

同時可以做這樣的理解:
Thread.currentThread().interrupt(); 這個用于清除中斷狀態(tài),這樣下次調用Thread.interrupted()方法時就會一直返回為true,因為中斷標志已經被恢復了。
而調用isInterrupted()只是簡單的查詢中斷狀態(tài),不會對狀態(tài)進行修改。

interrupt()是用來設置中斷狀態(tài)的。返回true說明中斷狀態(tài)被設置了而不是被清除了。我們調用sleep、wait等此類可中斷(throw InterruptedException)方法時,一旦方法拋出InterruptedException,當前調用該方法的線程的中斷狀態(tài)就會被jvm自動清除了,就是說我們調用該線程的isInterrupted 方法時是返回false。如果你想保持中斷狀態(tài),可以再次調用interrupt方法設置中斷狀態(tài)。這樣做的原因是,java的中斷并不是真正的中斷線程,而只設置標志位(中斷位)來通知用戶。如果你捕獲到中斷異常,說明當前線程已經被中斷,不需要繼續(xù)保持中斷位。
interrupted是靜態(tài)方法,返回的是當前線程的中斷狀態(tài)。例如,如果當前線程被中斷(沒有拋出中斷異常,否則中斷狀態(tài)就會被清除),你調用interrupted方法,第一次會返回true。然后,當前線程的中斷狀態(tài)被方法內部清除了。第二次調用時就會返回false。如果你剛開始一直調用isInterrupted,則會一直返回true,除非中間線程的中斷狀態(tài)被其他操作清除了。


看看內部實現

因此這兩個方法有兩個主要區(qū)別:

  • interrupted 是作用于當前線程,isInterrupted 是作用于調用該方法的線程對象所對應的線程。(線程對象對應的線程不一定是當前運行的線程。例如我們可以在A線程中去調用B線程對象的isInterrupted方法。)
  • 這兩個方法最終都會調用同一個方法-----isInterrupted( Boolean 參數),,只不過參數固定為一個是true,一個是false; ? ? ? ? ? ? ??注意:?isInterrupted( Boolean 參數)是isInterrupted(?)的重載方法。
  • ?

    由于第二個區(qū)別主要體現在調用的方法的參數上,讓我們來看一看這個參數是什么含義

    ?

    先來看一看被調用的方法 isInterrupted(boolean arg)(Thread類中重載的方法)的定義:

    1private?native?boolean?isInterrupted(?boolean?ClearInterrupted);

    原來這是一個本地方法,看不到源碼。不過沒關系,通過參數名ClearInterrupted我們就能知道,這個參數代表是否要清除狀態(tài)位。

    如果這個參數為true,說明返回線程的狀態(tài)位后,要清掉原來的狀態(tài)位(恢復成原來情況)。這個參數為false,就是直接返回線程的狀態(tài)位。

    這兩個方法很好區(qū)分,只有當前線程才能清除自己的中斷位(對應interrupted()方法)

    總結

    以上是生活随笔為你收集整理的多线程:interrupted、isinterrupted区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。