2010-08-02 90 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()首先。