java虚拟机关闭钩子

  java.lang.Runtim类提供了addShutdownHook(Thread hook)方法,用来添加虚拟机关闭的钩子。

 

用途

1应用程序正常退出,在退出时执行特定的业务逻辑

 

2虚拟机非正常退出,比如用户按下ctrl+c,操作系统关闭等。在退出时执行必要的挽救措施。

 

实例:

public class TestOnExit {
    public TestOnExit(){
        doShutDownWork();
    }
    private void doShutDownWork(){
        Runtime.getRuntime().addShutdownHook(new Thread(){
            public void run(){
                System.out.println("application will exit ....");
            }
        });
    }
    public static void main(String[] args) {
        TestOnExit exit=new TestOnExit();
        long beginTime=System.currentTimeMillis();
        for(int i=0;i<10;i++){
            try {
                System.out.println("application run the "+i+"ci");
                Thread.sleep(10000);
               
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
           
        }
        long endTime=System.currentTimeMillis();
        System.out.println("it speat time ..is "+(endTime-beginTime));
    }

}
可以做个测试,首先正常运行


java虚拟机关闭钩子_第1张图片

 

执行ctrl+c


java虚拟机关闭钩子_第2张图片

然后再试试kill -9 ,

但是遇到kill -9 命令就不行了,所以这个东西还是不很稳定。可用性不高!

kill -9 命令直接就把窗口关掉了,很暴力

我又试了下kill -15 这个,发现是可以的。截个图上来。



java虚拟机关闭钩子_第3张图片
 
 然后看运行的结果


java虚拟机关闭钩子_第4张图片
 是执行了钩子函数的

 

你可能感兴趣的:(java,thread,C++,c,虚拟机)