簡體   English   中英

InterruptedException的原因

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM