我感兴趣的是你捕获InterruptedExceptions但保留中断状态的情况..比如下面的例子
try{
//Some code
} catch (InterruptedException ie) {
// (Re-)Cancel if current thread also interrupted
pool.shutdownNow();
// Preserve interrupt status
Thread.currentThread().interrupt();
}
答案 0 :(得分:0)
如果您需要调用者知道发生了中断,您将重新中断该线程,但是您无法更改方法签名以声明方法throws InterruptedException
。
例如,如果您正在实施java.lang.Runnable
,则无法更改方法签名以添加已检查的异常:
interface Runnable {
void run();
}
因此,如果您在InterruptedException
实现中执行了Runnable
并且无法处理它,则应在该线程上设置中断标志,以允许调用类来处理它:
class SleepingRunnable implements Runnable {
@Override public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
如果您能够更改方法签名,最好这样做:因为InterruptedException
是一个已检查的异常,呼叫者被迫处理它。这使得你的线程可能会被打断得更加明显。