咱们开发的系统有时候会有进程挂掉的状况发生,换句话说就是咱们的虚拟机进程over了,此时若是咱们想要在进程关闭的时候执行某些如资源清理操做,那么咱们能够使用Java提供的钩子Hook解决方方案。java
JDK 提供了addShutdownHook(Thread thread)
方法用于注册一个钩子,当Java进程关闭的时候,这些钩子将会被执行,可是,在进程正常运行的过程当中,这些钩子是不会启动的。那么这些钩子在哪些状况下会被触发呢?大体有下面几点:bash
System.exit(status)
方法ctrl+C
操做、系统关闭或者操做系统宕机下面我举两个例子演示下面两种状况:ide
RuntimeHookTest.java
spa
public class RuntimeHookTest {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.err.println("The Java VM shutdown normally!");
}
}));
}
}
复制代码
ctrl + c
退出程序``操作系统
public class RuntimeHookTest {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.err.println("The Java VM has been interupted.");
}
}));
while (true) {
// 模拟程序一直运行
}
}
}
复制代码