thread.stop
,thread.suspend
,thread.resume
和runtime.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 ...