介绍
今天就跟大家聊聊有关怎么在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虚拟机关闭钩子(关闭钩),最后(试,捕捉),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()之前执行:
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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。