[英]The Cause of InterruptedException
從J2me doc我們知道:
java.lang.InterruptedException當線程等待,休眠或以其他方式暫停很長一段時間並且另一個線程中斷它時拋出。
問題是,如果從一個線程調用Thread.Interupt()為其他線程,其他線程的Run()方法在InputStream.Read(char [] buf)上等待,是否可以獲得此類異常?
事實上,阻止讀取響應線程中斷的行為是未定義的。 有關詳細信息,請參閱此長期錯誤 。 缺點是有時你會得到EOF,有時你會得到IOException。
不幸的是,不, 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
時生成InterruptedIOException
。 請注意,此異常是從IOException
派生而不是從InterruptedException
派生的,因此您可能需要兩個catch
子句來處理任一類型的異常,一個用於InterruptedException
,另一個用於InterruptedIOException
。 並且您將需要任何內部IOException
catch子句來忽略InterruptedIOException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.