钩子函数shutdownHook,解决程序异常退出问题
- 具体场景
- 程序正常退出
- 使用System.exit()
- 终端使用Ctrl+C触发的中断
- 系统关闭
- OutOfMemory宕机
- 使用Kill pid命令干掉进程(注:在使用kill -9 pid时,是不会被调用的)
- 具体代码
public class ExitCapture { public static void main(String[] args) {
//线程关闭时,在此执行一些关闭操作
Runtime.getRuntime().addShutdownHook(
new Thread(() -> {
System.out.println("The application will exit");
doThing();
})
);
int i = 0;
while (true){
try {
Thread.sleep(1000);
System.out.println("do thing");
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
if (i > 20) throw new RuntimeException("error");
}
}
private static void doThing(){
System.out.println("释放资源");
}
}
- Runtime.getRuntime().addShutdownHook();
方法的含义说明:
在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁、关闭连接等操作。
以上是 钩子函数shutdownHook,解决程序异常退出问题 的全部内容, 来源链接: utcz.com/z/513584.html