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));
}
}
可以做个测试,首先正常运行
执行ctrl+c
然后再试试kill -9 ,
但是遇到kill -9 命令就不行了,所以这个东西还是不很稳定。可用性不高!
kill -9 命令直接就把窗口关掉了,很暴力
,
我又试了下kill -15 这个,发现是可以的。截个图上来。
然后看运行的结果
是执行了钩子函数的