如何捕获System.exit事件?

har*_*hit 25 java listener

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

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

coo*_*ird 51

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

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

关闭挂钩在虚拟机的生命周期中的微妙时间运行,因此应该进行防御性编码.特别是它们应该被编写为线程安全的并且尽可能避免死锁.

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

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

  • Shutdown Hooks - 它显示了一个关于如何在关机时添加关闭挂钩的示例.

  • Shutdown Hooks API的设计 - 以问答形式解决了关闭钩子的一些设计决策.


Sil*_*rom 6

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