如果我在命令行上键入 Ctrl-C,Java 中的最后块是否仍会执行?

2022-09-03 00:20:21

我正在Windows中运行我的Java应用程序。如果我按 Ctrl-C 强制停止进程,并且当时代码正在块中运行,则仍会执行该块吗?cmd.exetryfinally

在我的测试中,似乎,是的,它被执行了。


答案 1

确保运行某些代码以响应操作系统信号的正确方法是注册“shutdownHook”。这是一个关于处理它的StackOverflow问题,这里有一篇关于JVM信号处理的细节比你可能想知道的要多得多。


答案 2

虽然您的最终代码可能已在Windows计算机上执行(我无法用Linux重现它),但根据最后的文档

注: 如果 JVM 在执行 try 或 catch 代码时退出,则 finally 块可能不会执行。同样,如果执行 try 或 catch 代码的线程被中断或终止,则即使应用程序作为一个整体继续,finally 块也可能不会执行。

因此,我不会使用 finally 块来确保执行一段代码,即使用户尝试过早退出也是如此。如果你需要它,你可以使用,就像Adrian Petrescu提到的,Shutdown Hooks。


推荐