如何捕获系统退出事件?
我有一个java应用程序,在其中我试图确保如果有人退出代码 System.exit() 在代码中 ,应该调用一个侦听器来做一些事情,比如记录消息和释放资源......
我如何实现它,欢迎任何建议/方法。
我有一个java应用程序,在其中我试图确保如果有人退出代码 System.exit() 在代码中 ,应该调用一个侦听器来做一些事情,比如记录消息和释放资源......
我如何实现它,欢迎任何建议/方法。
Runtime.addShutdownHook
方法可用于添加关闭钩子,这基本上是一个未启动的 ,它在关闭 Java 虚拟机时执行。Thread
但是,这是应该谨慎对待的领域,因为它是在JVM生命周期的非常敏感的时间执行的。从该方法的 API 规范中:Runtime.addShutdownHook
关机挂钩在虚拟机生命周期中的微妙时刻运行,因此应进行防御性编码。特别是,它们应该编写为线程安全并尽可能避免死锁。
无论如何,请务必阅读一下关闭钩子的工作原理,因为如果没有一些充分的准备,可能不应该接近它们。请务必仔细阅读该方法的 API 规范。Runtime.addShutdownHook
以下是我从搜索此答案的信息中找到的几篇文章:
Shutdown Hooks -- 它显示了一个小示例,说明如何在关闭时添加 shutdown hook 以进行日志记录。
Shutdown Hooks API 的设计 -- 以问答方式解决关闭 Hook 的一些设计决策。
该函数允许您将挂钩注册到 Java 虚拟机中。
钩子作为初始化但未启动的线程工作,它将在退出时由JVM调用。如果您注册了多个钩子,请注意钩子的调用顺序是未定义的。Runtime.addShutdownHook(Thread thehook)