以下处理中断异常的方法有什么区别?最好的方法是什么?
您可能来问这个问题,因为您调用了一个抛出 .InterruptedException
首先,您应该了解它是什么:方法签名的一部分以及调用您正在调用的方法的可能结果。因此,首先要接受这样一个事实,即 an 是方法调用的完全有效的结果。throws InterruptedException
InterruptedException
现在,如果您调用的方法引发此类异常,您的方法应该怎么做?您可以通过考虑以下几点来找出答案:
您正在实现的方法抛出中断异常
是否有意义?换句话说,调用方法时是一个明智的结果吗?InterruptedException
到现在为止,应该很清楚,只是做是一个坏主意。它对呼叫者不是很礼貌。您可以发明一个新的运行时异常,但根本原因(有人希望线程停止执行)可能会丢失。throw new RuntimeException(e)
其他示例:
实现 Runnable
:您可能已经发现,的签名不允许重新抛出 。好吧,您注册了实施,这意味着您注册以处理可能的.选择其他接口(如 Callable
),或遵循上述第二种方法。Runnable.run
InterruptedExceptions
Runnable
InterruptedExceptions
调用 Thread.sleep
:您正在尝试读取文件,规范说您应该尝试 10 次,中间间隔 1 秒。您呼叫 .因此,您需要处理.对于像这样的方法来说,说“如果我被打断,我无法完成尝试读取文件的操作”是完全有意义的。换句话说,该方法投掷是完全有意义的。Thread.sleep(1000)
InterruptedException
tryToReadFile
InterruptedExceptions
String tryToReadFile(File f) throws InterruptedException {
for (int i = 0; i < 10; i++) {
if (f.exists())
return readFile(f);
Thread.sleep(1000);
}
return null;
}
这篇文章已经重写为一篇文章在这里。