怎么在java虚拟机中利用钩子关闭函数addShutdownHook

  介绍

今天就跟大家聊聊有关怎么在java虚拟机中利用钩子关闭函数addShutdownHook,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1。自定义的ApplicationContext的上下文

package  cn.lijie;   public  class  ApplicationContext  {   private 才能;static  ApplicationContext 应用;   private 才能;void  init (), {   ,,,application =,;   ,,,Runtime.getRuntime () .addShutdownHook (new  MyShutdownHook ());   ,,}   public 才能;void  close (), {   ,,,System.out.println(“钩子函数关闭连接操作“);   ,,}   public 才能static  ApplicationContext  getApplication (), {   ,,,return 应用;   ,,}   }

2。定义一个钩子线程MyShutdownHook

package  cn.lijie;   public  class  MyShutdownHook  extends  Thread  {   public 才能;void 运行(),{   ,,,System.out.println(“钩子函数调用,准备关闭连接“);   ,,,ApplicationContext.getApplication () .close ();   ,,,System.out.println(“钩子函数调用,连接已经关闭“);   ,,}   }

3。春容器的启动主要

package  cn.lijie;   public  class  ApplicationContext  {   private 才能;static  ApplicationContext 应用;   private 才能;void  init (), {   ,,,application =,;   ,,,Runtime.getRuntime () .addShutdownHook (new  MyShutdownHook ());   ,,}   public 才能;void  close (), {   ,,,System.out.println(“钩子函数关闭连接操作“);   ,,}   public 才能static  ApplicationContext  getApplication (), {   ,,,return 应用;   ,,}   }

4.应用程序。xml

& lt; bean  name=癮pplication",类=癱n.lijie.ApplicationContext", init方法=癷nit",/在

当执行主方法的时候创建春容器,然后关闭,届时就会执行之前注册的钩子线程。

打印结果如下:

怎么在java虚拟机中利用钩子关闭函数addShutdownHook

<强>补充:java虚拟机关闭钩子(关闭钩),最后(试,捕捉),finalize()调用场景及执行顺序

java虚拟机关闭钩子(关闭钩),最后(试,捕捉),finalize(),三者都能在虚拟机关闭前做一些操作,但是调用场景和执行顺序不一样。

1。JAVA虚拟机关闭钩子(关闭钩子)在下面场景下被调用:

1)程序正常退出;

2)使用system . exit ();

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

4)系统关闭,

5) OutOfMemory宕机;

6)使用杀死pid命令干掉进程(注:在使用Kill - 9 pid时,是不会被调用的),

2。最后(try…catch . .)

当试里面的代码引起的错误导致虚拟机关闭前,执行最后;

3. finalize()方法

虚拟机垃圾回收过程中执行的方法;

4。三个方法的执行顺序

1)从java的API文档介绍可得关闭钩子会在finalize()之前执行:

怎么在java虚拟机中利用钩子关闭函数addShutdownHook

2)写了一个测试类测试最后和关闭钩子的执行顺序,可以看出最后在关闭钩之前执行:

package 测试;,   {public  class  ShutDownHookTest    public 才能;static  void  main (String [], args), {   ,,,try  {   ,,,,,new  ShutDownHookTest () .addShutdownHook ();   ,,,,,String  str=,“hello";   ,,,,,strs.charAt (8),,,,,,   ,,,}捕捉(Exception  e), {   ,,,,,e.printStackTrace ();   ,,,}finally  {   ,,,,,System.out.println(“执行了最后!“);   ,,,}   ,,},   public 才能;void  addShutdownHook (), {   ,,,Runtime.getRuntime () .addShutdownHook (new 线程(),{   ,,,,,public  void 运行(),{   ,,,,,,,try  {,,,,,,,,,,   ,,,,,,,,,System.out.println(“执行了ShutdownHook !“);   ,,,,,,,},catch  (Throwable  t), {   ,,,,,,,,,t.printStackTrace ();   ,,,,,,,}   ,,,,,}   ,,,,});   ,,}   }

3)这三个方法的执行顺序:最后-》关闭钩》finalize ()

看完上述内容,你们对怎么在java虚拟机中利用钩子关闭函数addShutdownHook有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

怎么在java虚拟机中利用钩子关闭函数addShutdownHook