2010-12-06 71 views

回答

3

從你以前的問題來看,我假設你對Java的行爲感興趣。

在Java中,如果線程當前阻塞,則會引發InterruptedException。如果線程未被阻塞,則不會拋出異常。

欲瞭解更多信息,請看這裏:
JavaDocs

對於.NET語言中,ThreadInterruptedException會如果線程當前正在阻止被拋出。如果線程沒有被阻塞,那麼在線程阻塞之前不會拋出異常。

請用您希望回答的語言標記您的問題。

+1

Java中的類似故事,除了(1)異常被稱爲`InterruptedException`,以及(2)線程有一個「中斷狀態」,如果線程沒有在等待或休眠。我不確定是否已經設置了中斷狀態的阻塞會導致異常被拋出,但是它不太可能破壞內容。 – cHao 2010-12-06 22:36:14

4

中斷一個線程是一種狀態安全的方法來取消它,但線程本身必須編碼以關注中斷。長時間,如果在執行該線程時發生.interrupt(),阻止拋出InterruptedException的Java操作將拋出該異常。

.interrupt()方法設置該線程的「中斷」標誌並中斷任何IO或睡眠操作。它什麼都不做,所以這取決於您的程序是否適當地進行響應 - 並通過Thread.interrupted()定期檢查其中斷標誌。

如果一個線程不檢查中斷,它不能安全地停止。 Thread.stop() is unsafe to use.因此,您使用.interrupt()停止線程,但是在編寫多線程代碼時,要確保.interrupt()能夠做出明智的做法取決於您。 This TechRepublic article is a pretty good tutorial.

+0

**嗨亞當,**我認爲***「長,阻止拋出InterruptedException的Java操作將拋出該異常,如果一個.interrupt()發生時,該線程正在執行」***是有種其他的方式。你說一個**線程阻塞**,那麼這是因爲:1)它已經進入睡眠一段時間2)它暫停了一個調用suspend()並將被阻塞,直到一個resume()消息3)線程通過wait()方法被掛起,並且將變成可運行的notify或allAll消息。在上述所有情況下,線程不執行任何處於阻塞狀態的內容。當int – AKh 2010-12-08 18:38:22

相關問題