繁体   English   中英

Java关闭挂钩

[英]Java shutdown hook

我在程序中添加了以下代码:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("exit");
    }
}){});

但是,我没有看到该消息。 附加信息:我正在Java 7的Netbeans IDE内部运行该程序。

编辑:我忘了补充说,有一个使程序保持活动状态的全局线程。 我按Netbeans右下角的[x]将其关闭。

JVM可以有序或突然关闭。 关闭挂钩会运行以有序关闭:最后一个normal线程终止时,有人调用System.exit或通过其他平台特定的方式(例如键入Ctrl-C)。

关机挂钩不会在JVM突然关机时运行。 在Netbeans的右下角按[x]时,这将导致JVM突然关闭,这就是为什么未启动shutdown钩子的原因。

例如 :

public class ShutdownHook {
public void attachShutDownHook() {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            System.out.println("exit");
        }
    });

}

public static void main(String[] args) {
    ShutdownHook sample = new ShutdownHook();
    sample.attachShutDownHook();
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

如果运行上面的代码,并让程序正常完成,您将看到控制台上显示exit 但是,如果按[x](在3秒钟内)突然将其关闭,则关闭挂钩将不会运行,并且控制台上将不会打印任何exit

我忘了补充说,有一个全局线程使程序保持活动状态。 我按Netbeans右下角的[x]将其关闭。

就是这样,在netbeans右下角以“ x”关闭程序不是常规关闭,它只是破坏了所有内容并将其关闭。

ShutdownHook仅在程序定期退出时才起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM