首页 > Java > java教程 > Java 关闭挂钩

Java 关闭挂钩

PHPz
发布: 2024-08-30 16:05:59
原创
750 人浏览过

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中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板