Runtime.getRuntime().addShutdownHook(shutdownHook);
这个方法的含义说明:
这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
package cn.cmcc.test; public class ShutDownTest { /** * @param args */ public static void main(String[] args) { // 定义线程1 Thread thread1 = new Thread() { public void run() { System.out.println("thread1..."); } }; // 定义线程2 Thread thread2 = new Thread() { public void run() { System.out.println("thread2..."); } }; // 定义关闭线程 Thread shutdownThread = new Thread() { public void run() { System.out.println("shutdownThread..."); } }; // jvm关闭的时候先执行该线程钩子 Runtime.getRuntime().addShutdownHook(shutdownThread); thread1.start(); thread2.start(); } }
打印结果:
thread2...
thread1...
shutdownThread...
thread1...
shutdownThread...
或者:
thread1...
thread2...
shutdownThread...
thread2...
shutdownThread...
结论:
无论是先打印thread1还是thread2,shutdownThread 线程都是最后执行的(因为这个线程是在jvm执行关闭前才会执行)。
相关推荐
JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的...
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { server.stop(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); } Or ...
使用addShutDownHook()附加到客户端进程的线程处理用户中止。 这个线程在Client.java被定义为一个内部类。 处理用户离开/加入服务器或 MUD,使用MUDServerMainline的shutdownhook MUDServerMainline和服务器端方法...
SpringBoot Rest与以下库中的JVM Futures结合 ... Runtime.getRuntime().addShutdownHook(new Thread(SpringBootFuturesSimulation::shutdown)); new SpringApplicationBuilder(SpringWebFuturesAppl
1 增加线程池consumer优雅退出机制Runtime.getRuntime().addShutdownHook 2 修改部分log输出方式,将原来的 log.info("exceptin:" + e) 修复为 log.info("exception: ", e) 20161227 更新 1 bug fix: 将...