5 interrupt的方法的解釋

2021-06-18 18:20:08 字數 1214 閱讀 5743

public class threadtest  catch (exception e)  finally 	}}

class mythread extends thread catch (exception e)

system.out.println("adfsad");

}}

這段**的輸出:

try

finally

run2exception

adfsad

1  interrupt只是設定乙個中斷狀態標誌,執行緒在執行過程中會不停檢查這個中斷狀態標誌

2 中斷狀態標誌不意味著該執行緒就要被中斷進入阻塞狀態,該幹嘛幹嘛。程式一般用thread.interrupted()和thread.currentthread().isinterrupted()還判斷下面程式的執行,不同的是前者會清空中斷,後者不會

3 interrupt()設定中斷標誌後,不管之前執行緒處於sleep狀態還是之後嘗試讓執行緒sleep,都會丟擲interruptedexception,**如下

class mythread2 extends threadcatch(interruptedexception e)

}}

輸出為:

aa

bbexception

另外,空迴圈,jvm應該做了優化,不然沒可能跑這麼快的吧。

interrupt不再強制執行緒該幹嘛或者**執行緒有的資源,替代了stop方法。stop不好的地方:

從jdk1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經驗告訴我們呢suspend方法會經常導致死鎖。

反對使用stop(),是因為它不安全。它會解除由執行緒獲取的所有鎖定,當在乙個執行緒物件上呼叫stop()方法時,這個執行緒物件所執行的執行緒就會立即停止,假如乙個執行緒正在執行:synchronized void  由於方法是同步的,多個執行緒訪問時總能保證x,y被同時賦值,而如果乙個執行緒正在執行到x = 3;時,被呼叫了 stop()方法,即使在同步塊中,它也乾脆地stop了,這樣就產生了不完整的殘廢資料。而多執行緒程式設計中最最基礎的條件要保證資料的完整性,所以請忘記執行緒的stop方法,以後我們再也不要說「停止執行緒」了。而且如果物件處於一種不連貫狀態,那麼其他執行緒能在那種狀態下檢查和修改它們。結果 很難檢查出真正的問題所在。

執行緒的interrupt方法

如下 片段 thread thread new thread thread.start thread.interrupt system.out.println end 呼叫了interrupt方法卻沒有產生中斷的原因 對執行緒的interrupt是對執行緒處在sleep,wait,join狀態的時候...

java中的interrupt 方法

interrupt 方法只是改變中斷狀態而已,它不會中斷乙個正在執行的執行緒。如果執行緒被object.wait,thread.join和thread.sleep三種方法之一阻塞,此時呼叫該執行緒的interrupt 方法,那麼該執行緒將丟擲乙個 interruptedexception中斷異常。1...

執行緒的喚醒interrupt 方法

執行緒的喚醒interrupt 方法 如果乙個執行緒睡眠太久了,有沒有辦法喚醒它嗎?有的,使用 物件.interrupt 方法。這個方法的意思是 中斷打擾,一盆冷水過去,執行緒立馬醒了,夠形象。喚醒的機制是靠異常機制,當使用這個方法之後,對應的執行緒的sleep進入catch異常捕捉,表明睡眠異常,...