2010-08-02 68 views
9

在Java中,Thread.sleep()引发InterruptedException。这个例外有什么好处呢?Thread.sleep中的InterruptedException()

我应该

  1. 传播异常向上调用链?
  2. 吞下异常?
  3. 正在做其他事情(请建议)?
+2

取决于发生异常的原因。这是一个理论问题还是你有一个用例? – 2010-08-02 17:48:57

+0

这篇文章可能会帮助你理解这个机制:[你干什么用InterruptedException?](http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256 2015-10-22 20:07:48

回答

9

您应该重新抛出异常。

这是布赖恩戈茨,优秀的书“Java Concurrency in Practice”的作者的抽象:

与InterruptedException的处理:

如果抛出InterruptedException的意思 一个方法是阻塞方法, 然后调用阻止方法意味着 您的方法也是阻止方法 也是,您应该有一个策略 用于处理InterruptedExc主器件接收。 通常最简单的策略是在putTask()和getTask() 方法清单1.这样做会使得显示扔 InterruptedException的自己,因为 你的方法响应中断 以及,往往需要什么 超过加InterruptedException 给你抛出子句。

参见:Dealing with InterruptedException

+2

另一种可能性是,立即断言中断状态。 Thread.currentThread()。中断()。如果你不控制正在调用的API(也许你正在实现一些第三方接口),那么这有时很有用,但是你希望保持中断状态,以便可以“注意到”是稍后的检查/阻止方法。 – 2010-08-02 19:34:32

0

如果你正在试图做的一切都烧了一段时间,我会建议只是交谈,而忽略例外。

另一方面,如果您需要适量的等待时间,并且任何先发制人的中断对您的程序来说都是非常糟糕的,那么您肯定应该重新抛出异常。

它只是取决于为什么发生异常以及您的使用案例是什么Thread.sleep()首先。