JAVA中斷執行緒的方法

2021-08-22 17:15:19 字數 1419 閱讀 9703

thread.stop,thread.suspend,thread.resumeruntime.runfinalizersonexit這些終止執行緒執行的方法已經被廢棄,使用它們是極端不安全的!

現在,如果你要安全有效地終止乙個執行緒,應該採用以下這些方法:

1,執行緒正常執行完畢,正常結束。

也就是讓run方法執行完畢,該執行緒就會正常結束。

2,監視某些條件,結束執行緒的不間斷執行。

然而,常常有些執行緒是伺服執行緒。它們需要長時間的執行,只有在外部某些條件滿足的情況下,才能關閉這些執行緒。

通常,它們執行在乙個while(true)的死迴圈中。

如:@override

publicvoidrun()

trycatch(interruptedexception e) }

}我們可以在while死迴圈內,每次迴圈時,察看外部條件,看看是否需要關閉當前執行緒。如果是,就break,跳出死迴圈,或者是丟擲異常,跳出死迴圈,結束執行緒。

3,捕獲interruptedexception

執行時異常,中斷當前執行緒。

有些執行伺服任務的執行緒,在while(true)這樣的死迴圈內部,是乙個阻塞中的方法。此時,就不能採用第二種方法了。因為,當該方法沒有返回時,該執行緒一直處於阻塞當中,根本無法執行其他語句。

此時,就需要呼叫該執行緒的interrupt方法,產生乙個interruptedexception 執行時異常,是阻塞中的那個方法丟擲這個異常,從而讓我們有機會結束這個執行緒的執行。

如:@override

publicvoidrun()catch(interruptedexception e1)

somework();

} 乙個外部的thread 物件 指向這個執行緒。 需要結束這個執行緒時,只需要呼叫thread物件的interrupt() 方法,就會在

responsemessage =this.getsendmessages().take();

這條語句中產生乙個

interruptedexception

異常,從而結束該執行緒的阻塞狀態,通過丟擲異常,或者

break

跳出死迴圈,結束這個執行緒。

Java中斷執行緒的方式

方式一 stop 方法 目前改方法已被註解 deprecated,因為它是執行緒不安全的操作,呼叫stop方法後,執行緒會立即停止,導致執行緒邏輯有一部分未執行,造成得到不可預期的結果。如下 中,預期輸出的結果是i j,但是使用stop中斷執行緒後,大概率出現j i 1.public class s...

Java裡有效中斷執行緒方法介紹

thread.stop,thread.suspend,thread.resume 和runtime.runfinalizersonexit 這些終止執行緒執行的方法已經被廢棄,使用它們是極端不安全的!現在,如果你要安全有效地終止乙個執行緒,應該採用以下這些方法 1 執行緒正常執行完畢,正常結束。也就...

多執行緒 執行緒中中斷執行緒的方法

public class threaddemo13 catch interruptedexception e system.out.println 交易終止 t1.start thread.sleep 2000 system.out.println 有內鬼終止交易 flag true public ...