我有一个应用程序在Java中,我尝试确保如果有人退出代码System.exit()在代码中,应该调用一个监听器做一些东西,如日志记录消息和释放资源...如何捕获System.exit事件?
我该如何执行它,任何建议/方法是受欢迎的。
我有一个应用程序在Java中,我尝试确保如果有人退出代码System.exit()在代码中,应该调用一个监听器做一些东西,如日志记录消息和释放资源...如何捕获System.exit事件?
我该如何执行它,任何建议/方法是受欢迎的。
可以使用Runtime.addShutdownHook
方法来添加关闭挂钩,该关闭挂钩基本上是一个未挂起的Thread
,它在关闭Java虚拟机时执行。
但是,这是一个应该谨慎行事的领域,因为它是在JVM生命周期的一个非常敏感的时刻执行的。从用于Runtime.addShutdownHook
方法的API规格:
关机钩在在虚拟机 的生命周期微妙时间 运行,因此,应防守编码 。他们应该在 特别是写成 线程安全并尽可能避免死锁 。
在任何情况下,请务必阅读一下关于挂钩挂钩的工作方式,因为如果没有做好准备,就不应该接近它。请务必仔细阅读Runtime.addShutdownHook
方法的API规范。
这里的是一对夫妇的文章中,我从寻找信息,这个答案发现:
Shutdown Hooks - 它显示的关闭钩子是如何在关机日志添加一个小例子。
Design of the Shutdown Hooks API - 解决问题和答案样式中关机挂钩的一些设计决策。
功能Runtime.addShutdownHook(Thread thehook)
允许您在Java虚拟机中注册挂钩。
该钩子作为初始化但未启动的线程工作,该线程将在退出时由JVM调用。如果你注册了多个钩子,请注意钩子被调用的顺序是未定义的。