Javaclosures挂钩

我已经将下面的代码添加到我的程序中:

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

但是我没有看到这个消息。 其他信息:我从Netbeans IDE中运行程序。

编辑:我忘了补充说,有一个全球线程,保持程序活着。 我在Netbeans右下angular按[x]closures它。

JVM可以以有序或突然的方式closures。 一个closures钩子运行有序closures:当最后一个normal线程终止时,有人调用System.exit或其他平台的具体手段(如键入Ctrl-C)。

closures挂钩不会运行JVM的突然closures。 当你在Netbeans右下angular按[x]时,这将导致JVM的突然closures,这就是closures挂钩没有启动的原因。

例如 :

 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秒内)将其突然closures,则closures挂钩将不会运行,并且控制台上将不会显示任何exit

我忘了补充说,有一个全局线程,保持程序活着。 我在Netbeans右下angular按[x]closures它。

那么就是这样吧,在netbeans右下angular用“x”closures程序并不是经常性的closures,它只是打破了一切,closures了它。

ShutdownHook仅在程序正常退出时才起作用