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