“关闭钩子”(ShutdownHook)是这样一个概念:向虚拟机注册一个线程,当程序退出(Ctrl+C)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等.
注册:
Runtime.getRuntime().addShutdownHook(Thread t);
注销:
Runtime.getRuntime().removeShutdownHook(Thread t);
[例子]
/**
* 在这个线程中实现程序退出前的清理工作
*
* @author Administrator
*
*/
class TestThread extends Thread {
boolean isTerminal = false;
public void run() {
while (!isTerminal) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run sub thread");
}
}
/**//**
* 清理工作
*/
public void onTerminal() {
isTerminal = true;
System.out.println("stop sun sub thread");
}
}
/**//**
* ShutdownDownHook测试类
*
* @author Administrator
*
*/
public class TestShutdownHook extends Thread {
TestThread testThread;
public void addThread(TestThread t) {
testThread = t;
}
/**//**
* 实现程序退出前的清理工作
*/
public void run() {
System.out.println("This is ShutdownHook");
testThread.onTerminal();
}
public static void main(String[] args) {
TestShutdownHook m = new TestShutdownHook();
TestThread t = new TestThread();
t.start();
m.addThread(t);
// 注册退出处理线程
Runtime.getRuntime().addShutdownHook(m);
}
}
运行结果:
run sub thread
run sub thread
run sub thread
run sub thread
This is ShutdownHook
stop sun sub thread
可以看到:当程序退出时启动了TestThread线程,执行了定义的释放工作。
分享到:
相关推荐
ShutdownHook-Java 优雅停机解决方案 ShutdownHook 是 Java 语言提供的一种钩子机制,当 JVM 接受到系统的关闭通知之后,调用 ShutdownHook 内的方法,用以完成清理操作,从而平滑的退出应用。这种有计划平滑的...
Java中得ShutdownHook提供了比较好的方案。 JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用...
RMI泥浆 跑步 make mud rmiregistry java src.MUDServerMainline <registry> ... 处理用户离开/加入服务器或 MUD,使用MUDServerMainline的shutdownhook MUDServerMainline和服务器端方法playerDisconnect
在Java应用中,特别是对于SpringBoot这类框架,开发者通常会注册一个`ShutdownHook`,这是一种在JVM退出前执行的回调机制。例如,在上面的代码中,当使用`Runtime.getRuntime().addShutdownHook()`方法注册了一个新...
6. ShutdownHook:为了优雅地关闭线程池,通常会注册一个JVM关闭钩子(Shutdown Hook),在程序退出前,线程池能够完成正在执行的任务并清理资源。 通过研究ExecuteFramework-master源码,我们可以学习到如何设计和...
14. **JVM关闭**:当JVM退出时,可能有一些线程还在运行,因此需要注册`ShutdownHook`,这是一组在JVM关闭时执行的钩子函数,用于执行必要的清理工作。 15. **关闭钩子(Shutdown Hook)**:通过`Runtime....
2. **自定义ShutdownHook**: 可以通过注册一个Java的`ShutdownHook`来控制停机流程。在`SpringApplication.addListeners()`中添加一个监听器,当接收到停机信号时,执行你的清理逻辑,然后调用`System.exit(0)`来...
在Java编程中,`Runtime`类的`shutdownHook`是一个重要的特性,它允许开发者在Java虚拟机(JVM)即将关闭时执行清理任务。本文将深入解析`shutdown hook`的使用,以及它在不同场景下的应用。 首先,`shutdown hook`...
`ShutdownHook`是Java的机制,用于在JVM关闭时执行清理工作。更新Proxool库以修复此类问题,确保正常关闭连接池并释放资源。 综上所述,理解并正确配置Proxool连接池参数对于提升应用程序的性能和稳定性至关重要。...
在关闭服务端时,使用 kill -2 命令可以触发 Java 的 ShutdownHook 事件处理,而 kill -9 命令则会强制杀死进程,不会执行 ShutdownHook。 七、优雅停机的实现原理 优雅停机的实现原理是基于 Spring Boot 的 ...
在Java应用程序中,Quartz能够帮助我们实现定时任务,比如定时发送邮件、数据备份或者执行某些周期性的业务逻辑。 在Quartz中,配置是至关重要的,因为它决定了任务调度的方式和性能。上述描述中提到了几个关键的...
同时,我们也使用了 Java 的 ShutdownHook 机制来确保资源的释放。 在业务逻辑中,我们可以使用 `BaseQueueHelper` 类来实现高性能的异步消息处理。例如,在应用 A 中,我们可以使用 `BaseQueueHelper` 类将数据...
`shutdownhook`是Java中的一个机制,允许在JVM退出前执行清理任务。如果应用程序代码中使用了`System.exit`,那么这将触发`shutdownhook`并导致Tomcat的退出。但在此案例中,代码层面的排查排除了`System.exit`的...
6. **ApplicationContext 创建**:根据配置创建 `ApplicationContext`,并根据需要设置 `ShutdownHook`、`BeanNameGenerator`、`ResourceLoader` 和 `Environment`。 7. **ApplicationContext 初始化**:加载 `...
demo 关于provider服务启动方式的说明: ...优点:框架本身提供(com.alibaba.dubbo.container.Main),可实现优雅关机(ShutdownHook) 第三种方式具体步骤: 1、pom.xml中配置打包操作 <!--打包可