如何在Java中实现优雅终止?

Che*_*tah 11 java terminal termination

比如我说我的应用程序在Linux终端上运行,我按下键盘上的"CTRL + C"来终止它将终止Java程序的过程.

有没有办法在我的Java应用程序中捕获此"请求",以便我可以正常关闭它并释放所有资源/写入日志.如果它对响应产生影响,我会运行几个不同的线程.

我知道你有一个addShutDownHook,但是在Java文档中写的,在某些情况下不会调用它,比如linux中"CTRL + C"的kill信号......还有其他方法吗?

Runtime.getRuntime().addShutdownHook(new Thread()
{
    public void run ()
    {
        // TODO: implement graceful shutdown here.
    }
});
Run Code Online (Sandbox Code Playgroud)

biz*_*lop 3

我认为免责声明仅适用于 kill -9,这样您就不必依赖调用关闭挂钩来维护数据的一致性。

因此,如果操作系统允许进程对信号进行操作,则会调用关闭挂钩,如果您了解操作系统的工作原理,那么这一点是非常明显的,但可能不是所有 Java 开发人员都知道。

实际上javadoc中对此进行了非常详细的解释。

另外值得记住的是,虚拟机中可以注册多个关闭挂钩,因此您的关闭挂钩可能不是关闭挂钩,而只是其中之一。