为什么中断异常检查异常?

在Java中使用线程时,处理InterruptedException似乎是我身边的一个棘手问题。 我很欣赏它在我的线程被终止时抛出的事实,因此为我提供了清理的机会。 我觉得奇怪的是,这不是一个没有检查的例外。

这会产生以下问题:a)如果我想在线程应用程序中使用现有框架,我不得不将其转换为框架接口接受的异常。 因此,框架通常会曲解它,而不是像它应该清理或传播它。

b)除非堆栈中每次调用严格声明InterruptedException(并且通常不是因为a)),否则很难完全关闭。

如果InterruptedException被取消选中,它看起来会有更高的可能性被正确使用,并导致线程和应用程序的整体关闭。 为什么不是?


中断应该是合作的。 我认为设计师想要避免一种情况,你可以通过中断它来阻止线程,线程没有代码来处理这种可能性。 意图似乎是让Runnable代码明确决定如何处理中断。 很多框架或语言代码似乎都是关于决定应该承担的责任,并试图明确正确的用法,以便最大程度地减少严重用户被烧伤的程度。 这是那些判断要求之一。

当InterruptedException被检查时,最糟糕的情况是异常被捕获,但以一种不太有用的方式。 (实际上绝对最坏的情况是中断标志没有被恢复,线程中的任何后续代码都不会意识到中断发生了。)如果InterruptedException未被选中(或者如果你将它包装在RuntimeException中,如链接到注释),异常可能会未处理,并继续终止线程,如果线程不在停止位置,这可能非常糟糕。

玩具示例和简单的代码可以更好地处理未经检查的InterruptedExceptions; 没有人会打扰捕捉异常,它会工作。 但是,在真正做出实质性工作的代码中,这可能被认为是有害的。

检查异常是为了确保开发人员知道可以抛出异常,以便开发人员可以避免在线程正在工作的中途抛出异常的情况,可能会使工作部分完成坏的状态。

链接地址: http://www.djcxy.com/p/83753.html

上一篇: Why Is InterruptedException a Checked Exception?

下一篇: automatic column prefix with cbind and just one column