ski*_*iwi 11 java hook shutdown
我已将以下代码添加到我的程序中:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("exit");
}
}){});
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到这个消息.附加信息:我从Netbeans IDE内部运行程序.
编辑:我忘了添加有一个全局线程,使程序保持活着.我按下Netbeans右下角的[x]来关闭它.
Deb*_*kia 13
JVM可以以有序或突然的方式关闭.关闭挂钩运行以便有序关闭:当最后一个normal线程终止时,有人调用System.exit或通过其他平台特定方式(例如键入Ctrl-C).
关闭挂钩不会因JVM的突然关闭而运行.当您按下Netbeans右下角的[x]时,这将导致JVM突然关闭,这就是没有启动关闭挂钩的原因.
例如 :
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();
}
}
Run Code Online (Sandbox Code Playgroud)
}
如果您运行上面的代码,并让程序正常完成,您将看到exit打印在控制台上.但是如果你按[x](在3秒内)突然关闭它,关机挂钩将不会运行,exit控制台上也不会打印.