[英]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.