在Java中处理线程时,处理InterruptedException似乎是一个特别棘手的问题。我欣赏它在我的线程被终止时抛出,因此为我提供了清理的机会。但奇怪的是,它不是一个未经检查的异常。
这创建了以下问题:
a)如果我想在我的多线程应用程序中使用现有的框架,则必须将其转换为框架接口接受的异常。 因此,该框架通常会错误地解释它,而不是像应该那样进行清理或传播。
b)除非针对堆栈中的每个调用严格声明InterruptedException(而通常由于a)而不是这样),否则很难进行干净的关闭。
如果InterruptedException改为未经检查,则似乎更有可能被正确使用,并导致线程和应用程序的干净关闭。 那为什么不是呢?
这创建了以下问题:
a)如果我想在我的多线程应用程序中使用现有的框架,则必须将其转换为框架接口接受的异常。 因此,该框架通常会错误地解释它,而不是像应该那样进行清理或传播。
b)除非针对堆栈中的每个调用严格声明InterruptedException(而通常由于a)而不是这样),否则很难进行干净的关闭。
如果InterruptedException改为未经检查,则似乎更有可能被正确使用,并导致线程和应用程序的干净关闭。 那为什么不是呢?
InterruptedException
本身的问题。 (b)RuntimeException
表示编程错误;InterruptedException
不是编程错误的结果。 - Sergey Kalinichenko