System.exit()结果无法执行finally块

Sur*_*tta 6 java try-catch-finally system.exit

我正在努力 My application's under maintanace module

try {
    if (isUndermaintanace) {
        System.exit(1);
    } else {
        prepareResources();
    }           
} catch (Exception e) {
    printStack(e);
} finally {
    cleanResources();
}
Run Code Online (Sandbox Code Playgroud)

当我通过 isundermaintanace true 最后没有执行.

我错过了什么?还有其他办法吗?

Cor*_*bin 15

Finally如果您杀死VM(或者VM以其他方式死亡),则不执行.System.exit()是一种杀死程序的相当粗略的方法,而最终是一个高级OOP概念.System.exit()非常快速地保释,尽可能少地进行清理.

如果你进入任务管理器并杀死了进程或发出了kill -9进程,你会期望最终执行吗?它含糊不清(非常模糊)同样的事情.


有一些值得注意的事情.特别是,我在帖子的第一部分撒了一点谎言.比喻System.exit()真正立即杀死一个程序是误导性的.特别是,运行了关闭挂钩,如果已配置,则实际上可以运行终结器.但请注意,文档相当强烈建议不要使用runFinalizersOnExit.