如何监听JVM进程关闭事件

摘要:JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的中断 4)系统关闭 5)使用Kill pid命令干掉进程

在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。
  JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:

  • 1)程序正常退出

  • 2)使用System.exit()

  • 3)终端使用Ctrl+C触发的中断

  • 4)系统关闭

  • 5)使用Kill pid命令干掉进程

注:在使用kill -9 pid方式杀掉进程,JVM注册的钩子不会被调用。


在JDK中方法的声明:
public void addShutdownHook(Thread hook)


参数
hook -- 一个初始化但尚未启动的线程对象,注册到JVM钩子的运行代码。
异常
IllegalArgumentException -- 如果指定的钩已被注册,或如果它可以判定钩已经运行或已被运行
IllegalStateException -- 如果虚拟机已经是在关闭的过程中

SecurityException -- 如果存在安全管理器并且它拒绝的RuntimePermission(“shutdownHooks”)

下面举个例子,代码如下:

Runtime.getRuntime().addShutdownHook(new Thread
(new Runnable() {
      @Override
       public void run() {
           stop();
       }
 }));
在主进程或者main()函数加上上面的代码,当进程被杀掉时会触发上面的线程,调用stop()函数,然后才退出进程。使用上面的形式注册钩子,能够让你的程序优雅地退出,及时地释放资源。

文章版权为朗度云所有,转载必须声明出处,否则保留追究法律责任。

版权说明:如无特殊说明,文章均为本站原创,如需转载请注明出处

本文标题:如何监听JVM进程关闭事件

本文地址:http://www.wolfbe.com/detail/201608/273.html

本文标签: java jvm

相关文章

感谢您的支持,朗度云将继续前行

扫码打赏,金额随意

温馨提醒:打赏一旦完成,金额无法退还,请谨慎操作!

扫二维码 我要反馈 回到顶部