我什么时候需要调用此方法Runtime.getRuntime()。addShutdownHook()以及何时或为何需要关闭我的应用程序。有谁可以通过举一些例子来解释我。
由于
答案 0 :(得分:37)
据我所知,我将在下面解释。您可以谷歌搜索并查找大量信息。
addShutdownHook()
将注册一些将在程序终止时执行的操作。您开始的程序以两种方式结束:
如果添加ShutdownHook,则挂钩将启动一个仅在终止时开始运行的线程。例如:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("Running Shutdown Hook");
}
});
会在程序终止时打印Running Shutdown Hook
。您甚至可以拨打System.exit(0)
。
例如,你可以谷歌,有足够的。问题“你什么时候应该使用此功能”就像是问catch
语句中的try-catch
做了什么。
您可能会遇到以下情况:
有些时候需要这一切。
答案 1 :(得分:9)
当您希望在虚拟机上发生关闭时发生某些事情时,您只担心关闭挂钩。
来自Javadoc:
Java虚拟机关闭以响应两种 事件:
- 当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
- 虚拟机终止以响应用户中断,例如键入^ C或系统范围的事件,例如用户注销或 系统关闭。
因此,关闭挂钩是一个初始化和未启动线程,在JVM关闭时执行。
应用程序服务器(例如JBoss AS)中存在关闭挂钩的常见示例。当您按 Ctrl + C 时,JVM会在退出之前调用所有已注册的Runtime
关闭挂钩(例如JBoss关闭挂钩)。
答案 2 :(得分:2)
一种情况是,如果您需要在jvm关闭之前停止任何守护程序线程(或)任何其他后端线程(主要是守护程序线程)需要正常退出,您将编写shutdown hook并使用上面的代码执行它。以下是我们几天前所做的有趣讨论。 Shutdown hook