返回顶部
首页 > 资讯 > 精选 >怎么在java虚拟机中利用钩子关闭函数addShutdownHook
  • 370
分享到

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

2023-06-12 09:06:06 370人浏览 薄情痞子
摘要

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

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

自定义的ApplicationContext的上下文

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

2.定义一个钩子线程MyShutdownHook

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

3.spring容器的启动main

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

4.application.xml

<bean name="application" class="cn.lijie.ApplicationContext" init-method="init" />

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

打印结果如下:

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

补充:JAVA虚拟机关闭钩子(Shutdown Hook)、finally(try,catch)、finalize()调用场景及执行顺序

JAVA虚拟机关闭钩子(Shutdown Hook)、finally(try,catch)、finalize(),三者都能在虚拟机关闭前做一些操作,但是调用场景和执行顺序不一样。

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

1) 程序正常退出;

2) 使用System.exit();

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

4)系统关闭;

5)OutOfMemory宕机;

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

2. finally(try...catch..)

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

3.finalize()方法

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

4.三个方法的执行顺序

1) 从java的api文档介绍可得Shutdown Hook会在finalize()之前执行:

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

2)写了一个测试类测试finally和Shutdown Hook的执行顺序,可以看出finally在Shutdown Hook之前执行:

package Test; public class ShutDownHookTest {   public static void main(String[] args) {    try {      new ShutDownHookTest().addShutdownHook();      String strs= "hello";      strs.charAt(8);         }catch(Exception e) {      e.printStackTrace();    }finally {      System.out.println("执行了finally!");    }  }    public void addShutdownHook() {    Runtime.getRuntime().addShutdownHook(new Thread() {      public void run() {        try {                     System.out.println("执行了ShutdownHook!");        } catch (Throwable t) {          t.printStackTrace();        }      }     });  }}

3)这三个方法的执行顺序:finally-》Shutdown Hook-》finalize()

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

--结束END--

本文标题: 怎么在java虚拟机中利用钩子关闭函数addShutdownHook

本文链接: https://lsjlt.com/news/262108.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在java虚拟机中利用钩子关闭函数addShutdownHook
    今天就跟大家聊聊有关怎么在java虚拟机中利用钩子关闭函数addShutdownHook,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。自定义的ApplicationContext的上...
    99+
    2023-06-12
  • 如何在java中使用关闭钩子
    如何在java中使用关闭钩子?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分...
    99+
    2023-06-14
  • Vue中钩子函数怎么用
    小编给大家分享一下Vue中钩子函数怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Vue 中可以把一系列复杂的操作包装为一...
    99+
    2024-04-02
  • Vue中callHook钩子函数怎么调用
    这篇“Vue中callHook钩子函数怎么调用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中callHook钩子函数...
    99+
    2023-07-04
  • 怎么在虚拟主机中运行java
    怎么在虚拟主机中运行java?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
    99+
    2023-06-14
  • Java虚拟机怎么利用JVM进行优化
    本篇文章为大家展示了Java虚拟机怎么利用JVM进行优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言Java虚拟机是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最...
    99+
    2023-05-31
    java jvm ava
  • Fedora中怎么利用Cockpit创建虚拟机
    Fedora中怎么利用Cockpit创建虚拟机,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Cockpit 是一个正在活跃开发的项目,它有许多扩展其工作的插件。...
    99+
    2023-06-16
  • 怎么在Java中创建虚拟机对象
    这篇文章给大家介绍怎么在Java中创建虚拟机对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、对象的创建1.1 new 类名虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,...
    99+
    2023-06-15
  • 在虚拟主机中怎么用phpmyadmin
    这篇文章主要介绍了在虚拟主机中怎么用phpmyadmin,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。在虚拟主机中使用phpmyadmin的方法...
    99+
    2024-04-02
  • 在vue中怎么利用全局路由钩子给url统一添加公共参数
    小编给大家分享一下在vue中怎么利用全局路由钩子给url统一添加公共参数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!有的时候我们可能有这样的需求,比如现在url为m.taoyuewenh...
    99+
    2024-04-02
  • 怎么在Java中利用数组模拟循环队列
    怎么在Java中利用数组模拟循环队列?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、...
    99+
    2023-06-14
  • 怎么在Unity中利用反射机制调用函数
    这期内容当中小编将会给大家带来有关怎么在Unity中利用反射机制调用函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。using System.Reflection;using Uni...
    99+
    2023-06-07
  • Golang函数的defer语句在文件关闭中怎么使用
    这篇文章主要介绍了Golang函数的defer语句在文件关闭中怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang函数的defer语句在文件关闭中怎么使用文章都会有所收获,下面我们一起来看看吧。G...
    99+
    2023-07-06
  • java中怎么使用try-with-resource机制关闭连接
    本篇内容主要讲解“java中怎么使用try-with-resource机制关闭连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中怎么使用try-with-resource机制关闭连接”...
    99+
    2023-06-20
  • kotlin函数怎么在java中使用
    本篇文章给大家分享的是有关kotlin函数怎么在java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于...
    99+
    2023-06-14
  • 怎么在Java中利用网络编程模拟在线聊天
    本篇文章为大家展示了怎么在Java中利用网络编程模拟在线聊天,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、前提知识需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。需要用到的类:Dat...
    99+
    2023-06-15
  • 怎么在java中利用流排序数组
    这篇文章给大家介绍怎么在java中利用流排序数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅...
    99+
    2023-06-14
  • 怎么在Java中利用多线程模拟站点售票
    怎么在Java中利用多线程模拟站点售票?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、实验题目二、分析哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建...
    99+
    2023-06-15
  • Java中怎么利用synchronized关键字实现同步机制
    Java中怎么利用synchronized关键字实现同步机制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的synchronized使用方法总结1.  把sy...
    99+
    2023-06-18
  • 怎么在python中利用choice生成随机数
    这篇文章将为大家详细讲解有关怎么在python中利用choice生成随机数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作