如何捕获System.exit事件?

时间:2009-05-27 08:48:19

标签: java listener

我在java中有一个应用程序,我试图确保if ifbody在代码中退出代码System.exit(),应该调用一个监听器来做一些事情,如记录消息和释放资源......

我如何实施,欢迎任何建议/方法。

2 个答案:

答案 0 :(得分:51)

Runtime.addShutdownHook方法可用于添加一个关闭钩子,它基本上是一个未启动的Thread,它在关闭Java虚拟机时执行。

然而,这是应该谨慎行事的领域,因为它是在JVM生命周期的非常敏感的时间执行的。来自Runtime.addShutdownHook方法的API规范:

  

关机挂钩在微妙的时间运行   在虚拟机的生命周期中   因此应编码   防守。他们应该在   特别是,写得很好   线程安全并避免死锁   尽可能。

无论如何,请务必仔细阅读关闭钩子如何工作,因为如果没有一些好的准备,可能不应该接近它们。请务必仔细阅读Runtime.addShutdownHook方法的API规范。

以下是我通过搜索此答案的信息找到的几篇文章:

答案 1 :(得分:6)

函数Runtime.addShutdownHook(Thread thehook)允许您将挂钩注册到Java虚拟机中 钩子作为初始化但未启动的线程工作,JVM在退出时将调用该线程。如果您注册了多个钩子,请注意调用钩子的顺序是未定义的。