为什么InterruptedException是一个经过检查的异常?

Vic*_*tor 6 java multithreading interrupted-exception

当我们制作自己的Threads时,这是关于旧Java的问题.有些方法比如在被另一个线程中断时Thread.sleep(100)抛出一个InterruptedException.据我所知,中断意味着另一个线索在说:让我接手吧.

当发生这种情况时,为什么Java要我们处理InterruptedException

程序员甚至不需要关心线程是否相互中断.他应该能够在线程之间划分工作,并在完成后进行通知.那么Java希望我们处理的原因是什么InteruptedException?它至少应该是RuntimeException

Bru*_*eis 7

程序员甚至不需要关心线程是否相互中断

这不是真的.在许多情况下,您想要知道已经请求了中断,但是您将稍微忽略它以完成您正在执行的工作.

例如,假设一个线程打开一个文件并开始编写一些数据.然后,该线程阻塞,等待计算其余数据.假设第二个线程试图中断第一个线程.它该怎么办?只是死了,也许你最终得到一个腐败,不完整的文件?它应该通过删除它开始写的文件来清理吗?它应该忽略中断请求并等待它必须写入的数据结束吗?它是否应该写出"我在这里被打断"的意思,以便下次可以从那时起继续工作?

在不同的场景中,假设您有一个HTTP服务器.假设用户正在访问您的服务器,比如从中下载一个大文件.您想要停止服务器.然后,应用程序将尝试中断所有工作线程.他们该怎么办?只需停止下载?或者,他们是否应该等待用户完成下载文件,之后他们应该死掉,而不再接受任何请求?两种情况都同样有效.

如你所见,有太多可能的情况,如果我们无法知道已经请求中断,那将会很糟糕.有时候,你只会让线程死掉.有时,您必须清理环境.有时,您希望它完成正在处理的请求但不接受任何更多请求.

  • 不确定这是如何回答这个问题的 - 如果未选中InterruptedException,那么上面写的所有内容都可以轻松实现. (2认同)