如何捕获System.exit事件?
问题内容:
我在Java中有一个应用程序,其中我尝试确保如果有人在代码中退出代码System.exit(),则应调用侦听器来执行某些操作,例如记录消息并释放资源…
我如何实施它,欢迎任何建议/方法。
问题答案:
该Runtime.addShutdownHook
方法可用于添加一个关闭钩子,该钩子基本上是未启动的Thread
,该钩子在Java虚拟机关闭时执行。
但是,这是应该谨慎对待的领域,因为它是在JVM生命周期的非常敏感的时间执行的。从API规范中获取该Runtime.addShutdownHook
方法:
关机挂钩在虚拟机的生命周期中的某个微妙时间运行,因此应进行防御性编码。尤其应将它们编写为线程安全的,并尽可能避免死锁。
无论如何,请务必仔细阅读一下关机挂钩的工作原理,因为如果没有做好充分的准备,就不应该使用它们。请务必仔细阅读该Runtime.addShutdownHook
方法的API规范。
这是我在搜索有关此答案的信息时发现的几篇文章:
-
Shutdown Hooks-它显示了一个如何在关闭时添加关闭钩子以记录日志的小例子。
-
Shutdown Hooks API的设计-以问答形式解决关闭钩子的一些设计决策。