如何捕获 System.exit 事件?
Posted
技术标签:
【中文标题】如何捕获 System.exit 事件?【英文标题】:How to capture System.exit event? 【发布时间】:2010-10-29 05:13:24 【问题描述】:我在 java 中有一个应用程序,我在其中尝试确保如果有人退出代码中的 System.exit() 代码,则应该调用一个侦听器来执行一些操作,例如记录消息和释放资源...
我该如何实现它,欢迎任何建议/方法。
【问题讨论】:
【参考方案1】:Runtime.addShutdownHook
方法可以用来添加一个关闭钩子,它基本上是一个未启动的Thread
,它在Java虚拟机关闭时执行。
但是,这是一个应该小心处理的领域,因为它是在 JVM 生命周期的一个非常敏感的时间执行的。来自Runtime.addShutdownHook
方法的 API 规范:
关闭挂钩运行在一个微妙的时间 在虚拟机的生命周期中 因此应该编码 防守。他们应该,在 特别是,写成 线程安全并避免死锁 尽可能。
无论如何,请务必阅读有关关闭挂钩如何工作的一些信息,因为如果没有做好准备,可能不应该接近它们。请务必仔细阅读 Runtime.addShutdownHook
方法的 API 规范。
这是我在搜索此答案的信息时发现的几篇文章:
Shutdown Hooks -- 它显示了如何添加关闭挂钩以在关闭时进行日志记录的小示例。
Design of the Shutdown Hooks API -- 以问答方式解决一些关闭挂钩的设计决策。
【讨论】:
【参考方案2】:Runtime.addShutdownHook(Thread thehook)
函数允许您在 Java 虚拟机中注册一个钩子。
该钩子作为一个已初始化但未启动的线程工作,该线程将在退出时由 JVM 调用。如果您注册了多个钩子,请注意调用钩子的顺序是不确定的。
【讨论】:
以上是关于如何捕获 System.exit 事件?的主要内容,如果未能解决你的问题,请参考以下文章