来自Thread.sleep()的InterruptedException

10
在Java中,Thread.sleep()方法会抛出InterruptedException异常。应该如何处理这个异常呢?
以下是几种可能的方式:
  1. 将异常向上层调用者传播。
  2. 忽略异常。
  3. 采取其他处理方式(请提出建议)。

2
取决于异常发生的原因。这是一个理论问题还是你有一个使用案例在脑海中? - Jim Garrison
2个回答

10

你应该重新抛出异常。

这是来自 Brian Goetz 的摘要,他是优秀书籍 "Java并发编程实战" 的作者:

处理InterruptedException

如果抛出InterruptedException意味着一个方法是阻塞方法, 那么调用阻塞方法意味着 你的方法也是阻塞方法, 并且你应该有一种策略 来处理InterruptedException。 经常最简单的策略是自己抛出 InterruptedException,就像 在清单1中的putTask()和getTask() 方法所示。这样做使得 你的方法也可以响应中断, 并且通常只需要将InterruptedException 添加到你的throws子句中。

参见:处理InterruptedException


2
另一种可能性是立即重新确认中断状态。Thread.currentThread().interrupt()。如果您无法控制正在调用的API(也许您正在实现某个第三方接口),但希望保留中断状态以便稍后检查/阻塞方法“注意到”,则有时会很有用。 - Mike Q

1

如果你只是想消磨一些时间,我建议你捕获并忽略异常。

另一方面,如果你需要正确的等待时间,任何预防性中断对你的程序都非常不利,那么你应该绝对重新抛出异常。

这取决于异常发生的原因以及你在首次使用Thread.sleep()时的用例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接