如何捕获系统退出事件?

2022-09-01 16:47:57

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

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


答案 1

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

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

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

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

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


答案 2

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


推荐