例如,我的应用程序在 Linux 终端中运行,我在键盘上按“CTRL+C”来终止进程,这将终止 Java 程序。
有什么方法可以在我的 Java 应用程序中捕获此“请求”,以便我可以优雅地关闭它并释放所有资源/写入日志。如果响应有所不同,我会运行几个不同的线程。
我知道您有一个 addShutDownHook,但正如 Java 文档中所写,它在某些情况下不会被调用,例如 linux 中来自“CTRL+C”的终止信号……还有其他方法吗?
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run ()
{
// TODO: implement graceful shutdown here.
}
});
最佳答案
我认为免责声明仅适用于 kill -9
,因此您不依赖于调用关闭 Hook 来维护数据的一致性。
因此,如果操作系统允许进程对信号进行操作,则会调用关闭 Hook ,如果您知道操作系统的工作原理,这将是非常明显的,但可能并非所有 Java 开发人员都知道。
实际上在 javadoc 中有非常详细的解释。 .
另外值得记住的是,一个 VM 中可以注册多个关闭 Hook ,因此您的关闭 Hook 可能不是 THE shutdown hook,只是其中之一。
关于java - 如何在 Java 中实现优雅终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029564/