java中addShutdownHook钩子程序用途

通过我们的程序中运行完之后都会进行一些清理工作,比如关闭数据库资源,同步等操作。这时我们的钩子函数addShutdownHook有了用武之地。

1.钩子程序执行时机:

当程序正常退出,系统调用 System.exit方法或虚拟机被关闭时才会执行添加的shutdownHook线程。其中shutdownHook是一个已初始化但并不有启动的线程,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以可通过这些钩子在jvm关闭的时候进行内存清理、资源回收等工作。 
2.用法

Runtime.getRuntime().addShutdownHook(Thread thread)

这里我们需要将一个线程对象传入,作为钩子程序的实现代码。本质上就是在jvm关闭时,执行一个线程。

3.实战

public class Client{
public void test1(){
	System.out.println("startting working......");
	Runtime.getRuntime().addShutdownHook(new Thread(){
		@Override
		public void run() {
			System.out.println("执行钩子线程");
		}
	});
	System.out.println("program endding");
}
}
执行结果:
startting working......
program endding
执行钩子线程
果然钩子线程是在主程序执行完毕之后才开始执行。

### 回答1: `Runtime.getRuntime().addShutdownHook()` 是 Java 的一个方法,用于在 JVM 关闭时执行一些清理工作。这个清理工作可以是任何类型的代码,例如关闭数据库连接、释放内存、保存数据等等。因此,它属于 JVM 钩子程序的一种。 具体来说,`addShutdownHook()` 方法是用来注册一个 JVM 钩子程序的,这个钩子程序在 JVM 即将关闭时自动执行。这个钩子程序可以是一个 Thread 对象,也可以是一个 Runnable 对象。无论是哪种类型的钩子程序,在执行时都必须是线程安全的。 ### 回答2: runtime.getruntime().addshutdownhookJava的方法,用于在Java虚拟机正常退出之前执行一些操作。它属于Java钩子程序Hook)。钩子程序可以通过Runtime类的addShutdownHook方法注册,当程序即将退出时,Java虚拟机按照注册的顺序逐个执行这些钩子程序addShutdownHook方法接收一个Thread对象作为参数,这个Thread对象就是注册的钩子程序。在Java虚拟机即将退出时,调用这些钩子程序的run方法,在这个方法可以执行一些清理工作、资源释放等操作。 钩子程序通常用于在程序退出前执行一些必要的清理操作,比如关闭文件、保存临时数据、释放资源等。它可以保证在正常退出的情况下执行这些操作,即使程序发生异常或被强制终止也能够执行。 需要注意的是,钩子程序Java虚拟机退出时是并发执行的,所以它们之间的执行顺序是不确定的。另外,一旦钩子程序启动后,就不能取消或更改它们的注册顺序。 总之,runtime.getruntime().addshutdownhook方法可以用来注册Java钩子程序,用于在Java虚拟机即将退出时执行一些必要的清理操作。 ### 回答3: runtime.getruntime().addshutdownhook属于JVM的钩子程序类型。 钩子程序是一种在特定事件发生时被自动调用的程序片段。在Java,JVM提供了一种机制,允许开发人员在JVM即将关闭之前注册一个或多个钩子程序。这些钩子程序可以用来执行一些清理工作或保存状态等操作,以确保程序在终止之前可以执行必要的操作。 addShutdownHook()方法是Runtime类的一个方法,用于绑定并注册一个钩子程序。当JVM即将关闭时,这个钩子程序被自动调用。通过这个钩子程序,开发人员可以在程序终止之前进行一些善后工作,例如关闭资源、保存数据、删除临时文件等。 钩子程序通常用于一些非正常终止程序的场景,例如异常退出、断信号、操作系统关闭等。它们提供了一种机制,允许程序在终止之前有机完成必要的操作,以避免数据丢失或资源泄漏。 需要注意的是,钩子程序执行顺序是不确定的,因此开发人员应该谨慎地设计和执行钩子程序,确保它们之间的相互依赖关系和执行顺序不引发问题。此外,钩子程序执行时间应尽量短,以避免延迟JVM的关闭进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值