3

正如标题所暗示的,我们是否需要在得到 InterruptedException 时强制 jvm 退出?我问的原因是我对(Unix)中断信号有点困惑。当我们在 java 应用程序运行时按 Ctrl-C 时,阻塞线程会得到 InterruptedException 吗?

简单来说,
1) 何时以及为何抛出 InterruptedException?
2)当JVM从外部中断或杀死时(如Unix命令),线程会被中断吗?

谢谢

4

2 回答 2

6

不,通常您不会退出 JVM 以响应InterruptedException.

InterruptedException可能在另一个线程调用其方法后在一个线程中引发interrupt()。它与硬件中断或操作系统信号没有任何关系。中断是一种告诉线程停止它正在做的事情并尽快退出而不会使共享内存处于损坏状态的方法。

线程只有在明确描述了它们如何响应中断时才应该被中断。通常,这会例如响应用户交互(如按下“取消”按钮)来完成。

通常,中断只影响单个线程,应用程序的其余部分继续运行。但是,我可以设想在 JVM 中安装一个信号处理程序,通过干净地关闭整个服务器来响应信号;这可能需要中断请求进程线程和其他线程。

于 2012-08-14T18:22:01.110 回答
0

中断异常与 JVM 错误条件无关,它是休眠线程在正常事件过程中被唤醒(通过 thread.interrupt())时收到的内容。

于 2012-08-14T18:21:40.120 回答