正如标题所示,当我们遇到InterruptedException时,是否需要强制JVM退出?我问这个问题的原因是我对(Unix)中断信号感到困惑。当我们在Java应用程序运行时键入Ctrl-C时,会阻止线程获取InterruptedException吗?
简单来说,
1)为什么会抛出InterruptedException?
2)当JVM被外部中断或终止(例如Unix命令)时,线程是否会被中断?
谢谢
正如标题所示,当我们遇到InterruptedException时,是否需要强制JVM退出?我问这个问题的原因是我对(Unix)中断信号感到困惑。当我们在Java应用程序运行时键入Ctrl-C时,会阻止线程获取InterruptedException吗?
简单来说,
1)为什么会抛出InterruptedException?
2)当JVM被外部中断或终止(例如Unix命令)时,线程是否会被中断?
谢谢
通常情况下,你不应该在出现 InterruptedException
异常时退出JVM。
InterruptedException
异常可能会在一个线程调用其 interrupt()
方法后在另一个线程中被触发。它与硬件中断或操作系统信号没有任何关系。中断是一种告诉线程停止当前正在执行的任务并尽可能快地退出,而不会使共享内存处于损坏状态的方法。
只有在线程明确说明如何响应中断的情况下才能中断线程。通常情况下,这是响应用户交互(例如按“取消”按钮)时完成的。
通常情况下,中断仅影响单个线程,应用程序的其余部分继续运行。但是,我可以想象在JVM中安装一个信号处理程序,通过优雅地关闭整个服务器来响应信号;这可能会涉及请求处理线程和其他线程的中断。
中断异常与JVM错误条件无关,它是休眠线程在正常情况下被唤醒(通过thread.interrupt())时接收到的异常。
wait()
方法来等待,但是当它们变得可运行时没有异常。还有一种已弃用的线程暂停机制,但也没有使用异常。 - erickson中断此线程。 首先调用此线程的checkAccess方法,可能会导致抛出SecurityException。 如果此线程在Object类的wait()、wait(long)或wait(long, int)方法的调用中被阻塞,或者在此类的join()、join(long)、join(long, int)、sleep(long)或sleep(long, int)方法的调用中被阻塞,则其中断状态将被清除,并且它将接收到InterruptedException。
- ddyer