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