執行緒的interrupt方法

2021-08-30 14:59:33 字數 765 閱讀 8070

如下**片段:

thread thread = new thread()

};thread.start();

thread.interrupt();

system.out.println("end");

呼叫了interrupt方法卻沒有產生中斷的原因:

對執行緒的interrupt是對執行緒處在sleep,wait,join狀態的時候才起作用。interruptexception不interrupt()方法丟擲的,interrupt()只改變執行緒的中斷狀態,sleep,wait,join的內部會不停的檢查執行緒中斷狀態,如果它們檢查到執行緒處於中斷狀態,就丟擲異常中斷執行緒。如果你的執行緒不處於這3個狀態中,呼叫interrupt不會中斷執行緒,或者說不會馬上中斷執行緒,如果後面的**有讓執行緒進入上面3個狀態的其中乙個,執行緒會馬上丟擲interruptexception而中斷,因為你之前的interrupt()呼叫改變了執行緒的內部狀態。

我們可以通過如下例子來來看效果:

thread thread = new thread() catch (interruptedexception e) }};

thread.start();

thread.interrupt();//這裡主線程會執行下來,而thread也會執行它自己的東西,這裡將執行緒的中斷狀態改變,那麼等到出遇到thread裡的sleep時就會產生中斷

system.out.println("end");

}

Interrupt方法結束執行緒

4.1.5.3.interrupt 方法結束執行緒使用interrupt 方法來中斷執行緒有兩種情況 1.執行緒處於阻塞狀態 如使用了sleep,同步鎖的wait,socket中的receiver,accept等方法時,會使執行緒處於阻塞狀態。當呼叫執行緒的interrupt 方法時,會丟擲inte...

執行緒常用方法 interrupt

一 thread.sleep 為什麼要丟擲 interruptedexception 其實最主要的目的是為了讓被打斷的執行緒具有響應中斷的能力 打斷只是設定標記而已,目的是為了讓被打斷的執行緒擁有感知能力,是否應該被打斷由自己控制,而不是由外部的執行緒去決定 具體可以參考這篇部落格,寫的挺好的 二 ...

執行緒的喚醒interrupt 方法

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