我什么时候需要调用此方法Runtime.getRuntime().addShutdownHook()

use*_*884 33 java

我什么时候需要调用此方法Runtime.getRuntime().addShutdownHook()以及何时或为何需要关闭我的应用程序.有谁可以通过举一些例子来解释我这个.

谢谢

Kri*_*ris 41

据我所知,我将在下面解释.你可以google它并找到很多信息.

addShutdownHook()将注册一些将在程序终止时执行的操作.您开始的程序以两种方式结束:

  1. 主线程(Root)结束其运行上下文;
  2. 该程序遇到了一些意想不到的情况,因此无法继续进行.

如果添加ShutdownHook,则挂钩将启动一个仅在终止时开始运行的线程.例如:

 Runtime.getRuntime().addShutdownHook(new Thread() {
      public void run() {
        System.out.println("Running Shutdown Hook");
      }
    });
Run Code Online (Sandbox Code Playgroud)

Running Shutdown Hook在任何时候终止程序时打印一个.你甚至可以打电话给System.exit(0).

例如,你可以谷歌,有足够的.问题是"你什么时候应该使用这个"就像问" catchtry-catch声明中做什么".

您可能有许多情况,例如:

  • 你的程序在你要删除的文件系统中创建了许多临时文件;
  • 你需要在终止之前向另一个进程/机器发送求救信号;
  • 对意外行为执行任何清理操作,日志记录或错误后操作.

所有这些都需要一段时间.

例如,您可以在此处执行示例1示例2

  • 您给出的终止理由不准确。请参阅 Buhake 的答案以获得正确的版本。 (2认同)

Buh*_*ndi 10

当您希望在虚拟机上发生关闭时发生某些事情时,您只需担心关闭挂钩.

来自Javadoc:

Java虚拟机关闭以响应两种事件:

  • 当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
  • 响应于用户中断(例如,键入^ C)或系统范围的事件(例如用户注销或系统关闭),终止虚拟机.

因此,关闭挂钩是一个初始化未启动的线程,在发生JVM关闭时执行.

应用程序服务器(例如JBoss AS)中存在流行的关闭挂钩示例.当您按Ctrl+时C,JVM会Runtime在退出之前调用所有已注册的关闭挂钩(例如JBoss关闭挂钩).

  • @garg10may - 就在JVM 关闭之前,将调用shutDownHook 中的代码。addShutDownHook 方法将线程作为输入参数。您可以在此线程中指定在最终 JVM 退出之前要处理的任何任务。 (2认同)