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

2021-08-30 08:11:32 字數 1576 閱讀 2933

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

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

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

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

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

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

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

如: publicvoid run()

try catch (interruptedexception e)

} }

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

3 捕獲interruptedexception 執行時異常,中斷當前執行緒。

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

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

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

3 捕獲interruptedexception 執行時異常,中斷當前執行緒。

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

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

如: publicvoid run() catch (interruptedexception e1)

somework();

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

這條語句中產生乙個interruptedexception異常,從而結束該執行緒的阻塞狀態,通過丟擲異常,或者break跳出死迴圈,結束這個執行緒。

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

這條語句中產生乙個interruptedexception異常,從而結束該執行緒的阻塞狀態,通過丟擲異常,或者break跳出死迴圈,結束這個執行緒。

JAVA中斷執行緒的方法

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

Java中斷執行緒的方式

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

Java併發(3) 中斷執行緒

2011 03 21 mon comments 在了解如何中斷執行緒之前,先應該弄清楚執行緒的幾種狀態 新建狀態 new 乙個新的執行緒在被建立之後,在執行 或阻塞 之前的狀態。就緒狀態 runnable 當乙個執行緒只要擁有cpu時間片就能執行的時候,這個執行緒就處於就緒狀態。阻塞狀態 block...