从J2me doc我们知道:
java.lang.InterruptedException当线程等待,休眠或以其他方式暂停很长一段时间并且另一个线程中断它时抛出。
问题是,如果从一个线程调用Thread.Interupt()为其他线程,其他线程在InputStream.Read(char [] buf)上等待其他线程的运行()方法,是否可以获得此类异常?
答案 0 :(得分:5)
事实上,未定义阻塞读取以响应线程中断的行为。有关详细信息,请参阅this long-standing bug。缺点是有时候你会得到EOF,有时你会得到IOException。
答案 1 :(得分: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
,另一个用于{ {1}}。并且你会希望任何内部InterruptedIOException
catch子句忽略IOException
s。