Java 如何捕获System.exit事件?
我有一个java应用程序,在其中我尝试确保如果有人在代码中退出codes System.exit(),那么应该调用一个侦听器来做一些事情,比如记录消息和释放资源Java 如何捕获System.exit事件?,java,listener,Java,Listener,我有一个java应用程序,在其中我尝试确保如果有人在代码中退出codes System.exit(),那么应该调用一个侦听器来做一些事情,比如记录消息和释放资源 我如何实现它,欢迎任何建议/方法。函数运行时。addShutdownHook(threadthehook)允许您将钩子注册到Java虚拟机中。 钩子作为一个初始化但未启动的线程工作,JVM将在退出时调用它。如果注册了多个钩子,请注意钩子的调用顺序是未定义的。该方法可用于添加关闭钩子,它基本上是一个未启动的线程,在Java虚拟机关闭时执行
我如何实现它,欢迎任何建议/方法。函数
运行时。addShutdownHook(threadthehook)
允许您将钩子注册到Java虚拟机中。钩子作为一个初始化但未启动的线程工作,JVM将在退出时调用它。如果注册了多个钩子,请注意钩子的调用顺序是未定义的。该方法可用于添加关闭钩子,它基本上是一个未启动的
线程,在Java虚拟机关闭时执行
然而,这是一个需要小心处理的领域,因为它是在JVM生命周期的一个非常敏感的时间执行的。从Runtime.addShutdownHook
方法的API规范:
关机挂钩在一个微妙的时刻运行
在虚拟机的生命周期中
因此应该进行编码
防守。他们应该,在
特别地,被写为
线程安全,避免死锁
尽可能地
在任何情况下,一定要读一点关于关机挂钩如何工作的知识,因为如果没有做好准备,可能就不应该接触它们。请务必仔细阅读Runtime.addShutdownHook
方法的API规范
以下是我在搜索此答案信息时发现的几篇文章:
- --它显示了一个小示例,说明了如何在关机时添加关机挂钩以进行日志记录
- --以问答式的方式讨论关机挂钩的一些设计决策