interrupt 執行緒相關

2021-08-25 09:44:27 字數 861 閱讀 4025

1. sleep() & interrupt()

執行緒a正在使用sleep()暫停著: thread.sleep(100000);

如果要取消他的等待狀態,可以在正在執行的執行緒裡(比如這裡是b)呼叫

a.interrupt();

令執行緒a放棄睡眠操作,這裡a是執行緒a對應到的thread例項

執行interrupt()時,並不需要獲取thread例項的鎖定.任何執行緒在任何時刻,都可以呼叫其他執行緒interrupt().當sleep中的 執行緒被呼叫interrupt()時,就會放棄暫停的狀態.並丟擲interruptedexception.丟出異常的,是a執行緒.

2. wait() & interrupt()

執行緒a呼叫了wait()進入了等待狀態,也可以用interrupt()取消.

不過這時候要小心鎖定的問題.執行緒在進入等待區,會把鎖定解除,當對等待中的線 程呼叫interrupt()

時(注意是等待的執行緒呼叫其自己的interrupt()),

會先重新獲取鎖定,

再丟擲異常.

在獲取鎖定之前,

是無法丟擲異常的.

3. join() & interrupt()

當執行緒以join()等待其他執行緒結束時,一樣可以使用interrupt()取消之.因為呼叫join()不需要獲取鎖定,故與sleep()時一樣, 會馬上跳到catch塊裡. 注意是隨呼叫interrupt()

方法,一定是阻塞的執行緒來呼叫其 自己的interrupt

方法.中呼叫來執行緒t.join().

則a會等t

執行完後在執行t.join

後的**,

中呼叫來 a.interrupt()

方法,

執行緒中斷interrupt

案例 這裡需要注意一下,try catch到interruptedexception e異常時,中斷訊號會被抹除,所以th.isinterrupted 如果執行在catch異常前,則isinterrupted為true,可以正常退出,否則中斷訊號抹除後,isinterrupted得到的值為false...

執行緒打斷interrupt

j a在之前是有執行緒打斷方法的,但是都已經不推薦使用了,原因如下 現在如果你希望打斷乙個執行緒,需要使用interrupt方法 第乙個interrupt方法 分析一下 執行緒打斷不保證成功,如果打斷的執行緒不是自己,那麼就需要去檢查自己是否有這個許可權去打斷乙個執行緒,檢測過程中,如果打斷者沒有許...

JAVA執行緒的interrupt

interrupt 只是改變中斷狀態而已.interrupt 不會中斷乙個正在執行的執行緒。這一方法實際上完成的是,給受阻塞的執行緒丟擲乙個中斷訊號,這樣受阻執行緒就得以退出阻塞的狀態 更確切 的說,如果執行緒被 object.wait,thread.join 和thread.sleep 三種方法之...