以下处理中断异常的方法有什么区别?最好的方法是什么?
你可能会问这个问题,因为你调用了一个抛出InterruptedException
的方法.
首先,你应该看到throws InterruptedException
是什么:方法签名的一部分,以及调用你正在调用的方法的可能结果.因此,首先要接受这样一个事实:InterruptedException
是方法调用的一个完全有效的结果.
现在,如果你调用的方法抛出这样的异常,your方法应该怎么做?你可以通过思考以下问题来找出答案:
Does it make sense for the method you are implementing to throw an 100?换句话说,当调用your方法时,InterruptedException
是一个合理的结果吗?
现在应该很清楚了,只做throw new RuntimeException(e)
不是一个好主意.这对打电话的人不太礼貌.您可以发明一个新的运行时异常,但根本原因(有人希望线程停止执行)可能会丢失.
Other examples:
Implementing 101:正如你可能已经发现的那样,Runnable.run
的签名不允许重播InterruptedExceptions
.you签署了实施Runnable
的协议,这意味着you签署了处理可能的InterruptedExceptions
的协议.或者 Select 一个不同的界面,比如Callable
,或者遵循上面的第二种方法.
Calling 100:你正在try 读取一个文件,规范说你应该在间隔1秒的时间内try 10次.你打Thread.sleep(1000)
.所以,你需要处理InterruptedException
个问题.对于tryToReadFile
这样的方法来说,最好说"If I'm interrupted, I can't complete my action of trying to read the file".换言之,这个方法抛出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;
}
这篇文章已被改写为第here条.