Java 如何捕获System.exit事件?

Java 如何捕获System.exit事件?,java,listener,Java,Listener,我有一个java应用程序,在其中我尝试确保如果有人在代码中退出codes System.exit(),那么应该调用一个侦听器来做一些事情,比如记录消息和释放资源 我如何实现它,欢迎任何建议/方法。函数运行时。addShutdownHook(threadthehook)允许您将钩子注册到Java虚拟机中。 钩子作为一个初始化但未启动的线程工作,JVM将在退出时调用它。如果注册了多个钩子,请注意钩子的调用顺序是未定义的。该方法可用于添加关闭钩子,它基本上是一个未启动的线程,在Java虚拟机关闭时执行

我有一个java应用程序,在其中我尝试确保如果有人在代码中退出codes System.exit(),那么应该调用一个侦听器来做一些事情,比如记录消息和释放资源


我如何实现它,欢迎任何建议/方法。

函数
运行时。addShutdownHook(threadthehook)
允许您将钩子注册到Java虚拟机中。
钩子作为一个初始化但未启动的线程工作,JVM将在退出时调用它。如果注册了多个钩子,请注意钩子的调用顺序是未定义的。

该方法可用于添加关闭钩子,它基本上是一个未启动的
线程,在Java虚拟机关闭时执行

然而,这是一个需要小心处理的领域,因为它是在JVM生命周期的一个非常敏感的时间执行的。从
Runtime.addShutdownHook
方法的API规范:

关机挂钩在一个微妙的时刻运行 在虚拟机的生命周期中 因此应该进行编码 防守。他们应该,在 特别地,被写为 线程安全,避免死锁 尽可能地

在任何情况下,一定要读一点关于关机挂钩如何工作的知识,因为如果没有做好准备,可能就不应该接触它们。请务必仔细阅读
Runtime.addShutdownHook
方法的API规范

以下是我在搜索此答案信息时发现的几篇文章:

  • --它显示了一个小示例,说明了如何在关机时添加关机挂钩以进行日志记录

  • --以问答式的方式讨论关机挂钩的一些设计决策