2013-06-01 21 views
1

直接從this甲骨文教程:有關中斷在Java

中斷

中斷是指示一個線程,它應該停止它 正在做和做別的事情。由程序員決定 究竟是一個線程如何響應中斷,但是線程終止的非常常見的是 。這是 課程中強調的用法。

「這是由程序員來決定。」哪裏是有可能的是特定行爲的計劃?是否「這是很常見的線程終止」意味着標準的行爲終止線程?

編輯: 例如,我們有從其中如果接收它只是延遲該中斷引起的被中斷的時間量的等待時間中斷Sempaphore類acquireUninterruptibly方法。在這種情況下,中斷處理可能只包含一個Thread.yield()? 在此先感謝。

回答

2

通常像睡覺的方法拋出InterruptedException

如果一個線程很長一段時間沒有調用引發方法InterruptedException?然後它必須定期調用Thread.interrupted,如果接收到中斷,則返回true。例如:

for (int i = 0; i < inputs.length; i++) { 
    heavyCrunch(inputs[i]); 
    if (Thread.interrupted()) { 
     // We've been interrupted: no more crunching. 
     return; 
    } 
} 

在這個簡單的例子中,代碼只是簡單地測試中斷並在線程已經收到時退出線程。在更復雜的應用程序,它可能會更有意義拋出一個InterruptedException:

if (Thread.interrupted()) { 
    throw new InterruptedException(); 
} 

現在回答你的問題:

  1. 從上面的例子可以看到,您可以通過處理InterruptedException的你如果它不是由方法處理,則爲自己
  2. 正如您可以爲這些方法處理此問題,您可以執行其他任務而不是退出。但是在發生中斷後退出線程肯定是最常見的。

來源javadoc

+0

Tnx回覆,檢查我的問題更新。你是否同意這只是一個Thread.yield()調用? – Rollerball

+0

我認爲你可以在中斷調用時使用yield – stinepike

1

當出現問題(即使存在其他情況)時會發生中斷,程序將切換到中斷服務程序。它可能會處理那裏的問題並繼續執行,或者如果無法解決則終止。在Java中,即使是「異常」(中斷),我們通常會編寫這樣的例程(這可能會導致中斷),並捕獲(例外)我們捕獲並處理它的地方。如果問題無法解決,我們終止它。

0

當您將中斷它設置一個標誌,它是比這更復雜,但是這是基本的行爲。你編程點檢測中斷通過使用一個

if(Thread.currentThread.isInterrupted()) 

或使用基本上這樣做的函數。你不應該認爲有什麼神奇的事情發生。在一天結束時,所有事情都是使用代碼實現的。