Thread.sleep()的InterruptedException

Mic*_*ray 10 java multithreading

在Java中,Thread.sleep()抛出InterruptedException.对这个例外做什么是正确的?

我是不是该

  1. 在调用链中传播异常?
  2. 吞下这个例外?
  3. 做其他事(请建议)?

Thi*_*Roy 10

你应该重新抛出异常.

这是Brian Goetz的摘要,他是优秀着作" Java Concurrency in Practice "的作者:

处理InterruptedException:

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

请参阅:处理InterruptedException

  • 另一种可能性是立即重新断言中断状态.Thread.currentThread().中断().如果您不控制正在调用的API(可能是您正在实现某些第三方接口),这有时很有用,但您希望保留中断状态,以便可以"注意到"以后的检查/阻止方法. (2认同)