搜索
首页Javajava教程Java 关闭挂钩

Java 关闭挂钩

Aug 30, 2024 pm 04:05 PM
java

Java中的一种特殊构造,允许开发人员制作一段代码的插件,该代码将在java虚拟机关闭期间执行,当我们必须在关闭期间执行清理操作时,这是非常必要的java虚拟机的down以及由于操作系统杀死请求或者资源问题等原因而导致的虚拟机关闭,不能用通用的构造来解决,而是可以使用shutdown提供的任意代码块来解决hook,它是 java.lang.Thread 类的扩展,在 java 虚拟机关闭期间,在 public void run() 方法内提供了必要的逻辑。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

Java 中 Shutdown Hook 的工作原理

  • java 虚拟机有两种不同的关闭方式。他们是:
    • 受控的过程。
    • 突然。
  • 当发生以下任一情况时,受控制的进程可能会导致 java 虚拟机关闭:
    • 最后一个非守护线程的终止。例如,java虚拟机随着主线程的退出而开始关闭。
    • 操作系统发出中断信号。例如,从操作系统注销或按 CTRL + C。
    • exit() 是从 java 代码中调用的。
  • 当发生以下任何一种情况时,java 虚拟机可能会突然关闭:
    • 如果操作系统发出终止信号。
    • getRuntime().halt() 从 Java 代码中调用。
    • 主机操作系统意外死亡。例如,停电的情况。
  • java虚拟机允许在系统关闭完成之前运行注册的函数。使用这些功能可以释放资源或执行某些内务活动。这些函数在 Java 虚拟机术语中称为 shutdown hooks。
  • 这些关闭钩子都已启动,但这些线程尚未启动。当java虚拟机开始关闭过程时,所有注册的钩子都会按照未指定的顺序进行处理。 java虚拟机在处理完所有的hook后将会停止。
  • 考虑下面的程序来演示 Java 中关闭钩子的使用:

代码:

//a class called mythr is defined and it extends a thread
class MyThr extends Thread
{
public void run()
{
System.out.println("The task of shut down hook is completed");
}
}
<em>//a class called shutdown is defined</em>
public class Shutdown
{
<em>//main method is called</em>
public static void main(String[] args)throws Exception
{
<em>//an instance of java runtime class is created</em>
Runtime roll=Runtime.getRuntime();
<em>//shutdown hook method is called using the instance of runtime class and the instance of mythr class is created</em>
roll.addShutdownHook(new MyThr());
System.out.println("The main starts to sleep. Press control and c to exit");
try
{
Thread.sleep(3000);
}
catch (Exception e)
{
}
}
}

上述程序的输出如下图所示:

Java 关闭挂钩

在上面的程序中,定义了一个名为 mthr 的类,它扩展了一个线程。然后定义了一个名为shutdown的类。然后调用main方法。然后创建一个java运行时类的实例。然后使用运行时类的实例调用 shutdown hook 方法,并创建 myhr 类的实例。 shutdown 钩子方法导致 shutdown 类中的 print 语句被打印出来,然后是 myhr 类的 run 方法中的语句。程序的输出如上面的快照所示。

Java Shutdown Hook 示例

以下是下面提到的示例:

示例#1

Java程序演示在程序中使用shutdown hook:

代码:

//a class called shutdown is defined
public class ShutDown
{
//main method is called
public static void main(String[] args)
{
//an instance of java runtime class is created and a new thread constructor is passed as a parameter to shutdown hook method
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
System.out.println("the shut down hook is in progress !");
}
});
System.out.println("Termination of application ...");
}
}

上述程序的输出如下图所示:

Java 关闭挂钩

上面的程序中,定义了一个调用关闭的类。然后调用main方法。然后创建一个 java 运行时类的实例,并将一个新的线程构造函数作为参数传递给 shutdown hook 方法。程序的输出如上面的快照所示。

示例#2

Java程序演示在程序中使用shutdown hook:

代码:

//a class called demo is defined
public class Demo
{
// a class called mess is defined and it extends a thread and this function is called when the program is exiting
static class Mess extends Thread
{
public void run()
{
System.out.println("Good Bye.");
}
}
//main method is called
public static void main(String[] args)
{
try
{
//shutdown hook method is called to which the instance of the class mess is passed as a parameter
Runtime.getRuntime().addShutdownHook(new Mess());
// the beginning of the program is printed
System.out.println("Beginning of the program...");
// the wait time for the thread is printed
System.out.println("The wait time for the thread is three seconds...");
Thread.sleep(3000);
//Ending of the program is printed
System.out.println("Ending of the program...");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

上述程序的输出如下图所示:

Java 关闭挂钩

在上面的程序中,定义了一个mess类,它扩展了一个线程,并在程序退出时调用该函数。然后调用main方法。然后调用 shutdown 钩子方法,将混乱类的实例作为参数传递给该方法。然后打印程序的开头。然后打印线程的等待时间。然后打印程序的结束信息。程序的输出如上面的快照所示。

Java Shutdown Hook 的优点

Java shutdown hook 有几个优点。他们是:

  • java 虚拟机的重要功能是关闭钩子,因为它们提供了在 java 虚拟机关闭时清理资源或存储应用程序状态的能力。
  • 当java虚拟机正常或突然关闭时,关闭钩子可以在运行时执行。
  • 通过运行时应用程序编程接口,可以在java虚拟机运行过程中的任意时间点注册多个关闭钩子。

结论

在本教程中,我们通过定义了解 Java 中关闭钩子的概念,通过示例及其输出了解 Java 中关闭钩子的工作原理。

以上是Java 关闭挂钩的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?Mar 17, 2025 pm 05:46 PM

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?Mar 17, 2025 pm 05:44 PM

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?Mar 17, 2025 pm 05:43 PM

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Mar 17, 2025 pm 05:35 PM

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。