JVM可以有序或突然关闭。关闭挂钩会运行以有序关闭:当最后一个
normal线程终止时,有人呼叫
System.exit或通过其他平台特定的方式(例如,按Ctrl-C)。
Shutdown
hooks不会为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控制台上将没有任何打印内容。



