钩子函数shutdownHook,解决程序异常退出问题

编程

  • 具体场景

  1. 程序正常退出
  2. 使用System.exit()
  3. 终端使用Ctrl+C触发的中断
  4. 系统关闭
  5. OutOfMemory宕机
  6. 使用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

回到顶部