何时控制CTRL + C被忽略

时间:2014-02-18 12:28:16

标签: java exception-handling

我有一个java应用程序,它是作为main方法实现的,带有try,catch finally块。这项工作是在尝试中完成的。如果我通过bash脚本启动应用程序,并在执行期间发出CTRL+C,我注意到行为不一致。有时catch块会执行,有时则不执行。这可以解释一下吗?

(下面的示例代码 - 有时既没有记录“抓住”或“关闭完成”)

public class Foo {
    public static void main(String[] args) {
       try {
      doStuff();
       } catch (Throwable e) {
          LOGGER.error("Caught.", e);
       } finally {
          LOGGER.info("Shutdown complete.");
       }
    }  
}

1 个答案:

答案 0 :(得分:2)

根据finally documentation,JVM给出的并不保证finally块的执行:

如果在执行try或catch代码时JVM退出,则finally块可能无法执行。同样,如果执行try或catch代码的线程被中断或终止,则即使整个应用程序仍在继续,finally块也可能无法执行。

因此你不能依赖finally块。 如果您需要捕获CTRL-C事件,最好使用shutdown hook