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仅在程序正常退出时才起作用