题
我有一个java应用程序,在其中我尝试确保如果有人退出代码中的System.exit(),则应该调用侦听器来执行一些操作,例如记录消息和释放资源...
我该如何实施它,欢迎任何建议/方法。
解决方案
这 Runtime.addShutdownHook
方法可以添加一个shutdown hook,基本上就是一个未启动的 Thread
, ,它在 Java 虚拟机关闭时执行。
然而,这是一个应该小心对待的领域,因为它是在 JVM 生命周期的一个非常敏感的时间执行的。从 API 规范 Runtime.addShutdownHook
方法:
在虚拟机的生命周期中,关闭钩子在微妙的时间内运行,因此应进行防御性编码。尤其应该将它们写成线程安全,并尽可能避免僵局。
无论如何,请务必阅读一些有关关闭挂钩如何工作的信息,因为如果没有做好充分的准备,可能不应该接触它们。请务必仔细阅读 API 规范 Runtime.addShutdownHook
方法。
以下是我通过搜索此答案的信息找到的几篇文章:
关机挂钩 -- 它显示了如何添加关闭挂钩以在关闭时进行日志记录的小示例。
Shutdown Hooks API 的设计 -- 以问答方式解决关闭挂钩的一些设计决策。
其他提示
在功能Runtime.addShutdownHook(Thread thehook)
允许你注册一个钩子到Java虚拟机。结果
挂钩工作作为初始化但尚未启动的线程,该线程将退出JVM的调用。如果你注册多个钩,请注意,在其中钩的调用顺序是不确定的。
不隶属于 StackOverflow