2009-10-13 21 views
5

的原因包括J2ME的文檔,我們知道:InterruptedException的

java.lang.InterruptedException當一個線程在等待,睡覺,或以其他方式拋出該異常停頓了很長一段時間,另一個線程中斷了。

問題是如果從一個線程調用Thread.Interpt()獲取此類異常是否可行,而其他線程的Run()方法正在等待InputStream.Read(char [] buf)?

回答

5

的響應阻塞讀中斷是線程,其實,不確定的行爲。詳情請參閱this long-standing bug。簡而言之,有時候你會得到EOF,有時會得到IOException。

+3

通常你不會得到任何東西。 – erickson 2009-10-13 16:44:07

+0

NB長期存在的BUG在2011年得到解決:「這不再是JDK7的問題,因爲傳統的中斷I/O默認情況下,在Solaris上禁用這是從來沒有上的Winodws實現的,而不是一直以來jdk1在Linux上實現的。 3.」 – EJP 2014-11-11 02:26:15

4

不幸的是,不,java.io.*類不來打擾他們被阻擋在讀取或寫入方法時作出迴應。通常你要做的就是關閉流,然後處理拋出的IOException。我有這樣的模式在我的代碼重複:

try { 
    for (;;) { 
     try { 
      inputStream.read(data); 

      thread.join(); 
     } 
     catch (IOException exception) { 
      // If interrupted this isn't a real I/O error. 
      if (Thread.interrupted()) { 
       throw new InterruptedException(); 
      } 
      else { 
       throw exception; 
      } 
     } 
    } 
} 
catch (InterruptedException exception) { 
} 

或者較新的java.nio.*類做處理中斷更好,產生InterruptedIOException時候,他們被中斷。請注意,此異常是從IOException派生,而不是從InterruptedException所以你可能需要兩個catch條款處理任何類型的例外,一爲InterruptedException,一個用於InterruptedIOException。你會想要任何內部的IOException catch子句忽略InterruptedIOException s。

+0

不幸的是方法中斷()在J2ME – Pirks 2009-10-13 17:08:18

+1

這是真的沒有實現,也不在了Thread.interrupt()。那麼你的中斷來自哪裏?是什麼激發了這個問題? – 2009-10-13 17:44:03

相關問題