在像生产者/消费者这样的多线程程序中,Swallowing InterruptedException的目的是什么

时间:2011-04-12 23:42:49

标签: java

有些代码只是打电话 catch(InterruptedException ex){},为什么?

3 个答案:

答案 0 :(得分:5)

这通常表明开发人员不知道如何处理异常,因此忽略了它。

这是一种不良行为导致某些人说被检查的例外是一个失败的实验。恕我直言开发人员应该学会处理异常。

处理此异常的更好方法是

  • 将其传递给来电者。即不要抓住它。
  • 调用Thread.currentThread()。interrupt(),这样中断就不会丢失。
  • 如果不可能出现此类异常,请将其包装在throw new AssertionError(ex)

答案 1 :(得分:0)

用于可能发生异常但对异常的响应与try块的正常继续相同的情况。一个常见的例子是调用sleep()。 (然而,这实际上往往是一个不好的例子,因为被中断经常表示应该放弃一个操作。)

答案 2 :(得分:0)

InterruptedException是所谓的已检查异常。当添加到您要调用的方法时,它表示您必须考虑到这种情况,即您需要处理调用结果的时间可能会被系统中的另一个线程抢占。

假设您在try块中有6-7个语句,并且您认为它们将以或多或少的原子方式运行。这些语句中有一个依赖于线程感知行为的语句。如果该呼叫被抢占,您的后续陈述将无法运行,您将不得不处理后果。

人们有各种各样的理由来捕捉这个例外,但不采取任何行动。除非我能清楚地表明被中断不会在我的代码中产生不良副作用,否则我无法想到这样做的很多好理由。给出显示此行为的任何示例代码,我猜不会包含任何catch逻辑,因为a)程序员没有计划处理它; b)程序员只想通过检查,以便代码编译。