`
woshixushigang
  • 浏览: 576037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

shutdown钩子

    博客分类:
  • j2ee
阅读更多
关闭钩子”(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线程,执行了定义的释放工作。

分享到:
评论

相关推荐

    64位tomcat一闪而过的解决方法

    7. **错误的shutdown钩子**:有时,一个未正确关闭的shutdown钩子可能导致Tomcat在启动时自动关闭。检查`bin/setenv.sh`或`bin/setenv.bat`文件,删除可能导致问题的钩子。 8. **服务注册**:如果在Windows上,尝试...

    Tomcat 6 启动过程分析.doc

    接着,启动Server并注册一个shutdown钩子,确保在接收到系统关闭信号时能正确关闭Tomcat。最后,Catalina会进入监听状态,等待shutdown命令。 `load`方法负责初始化Server实例,包括设置系统属性、初始化命名服务,...

    JAVA虚拟机关闭钩子(Shutdown Hook).docx

    JAVA虚拟机关闭钩子(Shutdown Hook).docx

    elasticsearch-maven-plugin:一个Maven插件,用于在构建的集成测试阶段运行单个节点Elasticsearch集群

    使用stop目标终止它们,并且为了更加省心,使用JVM shutdown钩子终止它们。 每个实例都安装在$ {project.build.directory} / elasticsearch $ {instanceIndex}中。 对于Elasticsearch 1.xx和2.xx版本的支持,请...

    neo4j安装配置入门教程

    // 注册shutdown钩子,确保数据库正常关闭 private static void registerShutdownHook(GraphDatabaseService graphDb) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { ...

    WEB服务器工作机制由浅至深(9):【How Tomcat Works】第16章关闭钩子以及之后的章节简述

    在深入探讨Tomcat服务器的工作机制时,我们来到了第16章,这一章主要讨论了“关闭钩子”(Shutdown Hooks)的概念及其在Tomcat中的应用。关闭钩子是Java应用程序中的一个重要特性,它允许我们在程序退出前执行必要的...

    通过JDK源码分析关闭钩子详解

    关闭钩子,也称为Shutdown Hooks,确保即使在非正常退出的情况下,特定的代码块仍能得到执行。本文将深入探讨JDK源码中的关闭钩子机制,以及如何在实际开发中利用这一特性。 首先,当用户尝试关闭程序,可能由于...

    graceful-shutdown-spring-boot:使用Spring Boot正常关闭(演示)

    1. **Shutdown Hooks**:Java提供了JVM关闭钩子(Shutdown Hooks),允许在JVM退出之前执行清理任务。在Spring Boot中,可以通过实现`DisposableBean`接口或者使用`@PreDestroy`注解的方法来注册这些钩子。当应用...

    shutdown-app

    - Java提供了"Shutdown Hooks"机制,通过在JVM关闭前注册钩子函数来执行必要的清理任务。可以使用`Runtime.getRuntime().addShutdownHook(Thread hook)`来添加一个钩子。 5. **Spring Boot应用关闭**: - 如果...

    解析Runtime中shutdown hook的使用详解

    通常,这些钩子用于进行必要的资源清理,例如关闭文件流、数据库连接等。通过调用`Runtime.getRuntime().addShutdownHook(Thread t)`方法,可以将一个已经初始化但尚未开始执行的线程作为`shutdown hook`注册到JVM中...

    PCHunter_free类拟冰刃win64位

    4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego 等 Notify Routine 信息查看,并支持对这些 Notify Routine 的删除 5.端口信息查看,目前不支持2000系统 6.查看消息钩子

    PCHunter 1.57 有效期到2099年。

    4、CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等近20多种Notify Routine信息查看,并支持对这些Notify Routine的删除 5、端口信息查看,目前不支持2000系统 6、查看...

    C# 截获关机、注销、重启的消息

    使用`SetWindowsHookEx`函数设置一个WH_SHELL类型的钩子,这个钩子可以捕获到关机、注销、重启等系统级事件。记得在退出程序时调用`UnhookWindowsHookEx`来释放钩子。 5. **处理消息**: 在`WndProc`方法中,添加...

    xuetr_内核工具

    4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除 5.端口信息查看,目前不支持2000系统 6.查看消息钩子 ...

    C#个人关机提醒服务

    Windows API函数SetWindowsHookEx可以注册一个全局钩子,监听特定的消息,比如WM_QUERYENDSESSION和WM_ENDSESSION,这两个消息分别表示用户尝试关闭电脑和电脑即将关闭,是监测关机事件的关键。 "友好提醒、提示"这...

    用INT 2E中断 关机VC代码

    在`INT 2E`中断方法中,我们跳过了用户级的钩子(User-Level Hooks),这些钩子通常被安全软件或恶意软件用来监控或修改系统行为。直接调用中断可以避免这些钩子的影响,使得关机过程更加直接且难以被拦截。 使用...

    JAVA并发编程实践-线程的关闭与取消-学习笔记

    15. **关闭钩子(Shutdown Hook)**:通过`Runtime.getRuntime().addShutdownHook(Thread hook)`注册自定义的关闭钩子,这些钩子在JVM关闭时执行,用于清理资源。 16. **精灵线程(Daemon Thread)**:精灵线程是不...

    Java应用中使用ShutdownHook友好地清理现场

     JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:  1)程序正常退出  2)使用System.exit()  3)终端使用Ctrl+C触发的...

    Xuetr ARK工具

    4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除 5.端口信息查看,目前不支持2000系统 6.查看消息钩子 7....

    XueTr专用版 Hook 过保

    4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除 5.端口信息查看,目前不支持2000系统 6.查看消息钩子 7....

Global site tag (gtag.js) - Google Analytics