关闭钩子(ShutdownHook)

原创 2012年03月22日 20:11:46

http://www.blogjava.net/zJun/archive/2006/03/12/34946.html

关闭钩子”(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线程,执行了定义的释放工作。

 

相关文章推荐

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

Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。 JDK提供了Java...

Java利用ShutDownHook关闭系统资源

Java关闭钩子在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源的功能。 使用Runtime.addShutdownHook(Thread hook)向JVM添加关闭钩子 pub...

ShutdownHook - 优雅地停止服务

ShutdownHook

addShutdownHook()方法简单介绍

        Runtime.addShutdownHook(Thread),java的钩子。以前从未用过, 也不知道什么是 shutdown hook。最近刚刚接触了一点,总结一下。       ...
  • barech
  • barech
  • 2008年02月01日 16:41
  • 1431

java ShutdownHook(钩子线程)

在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。   JDK在1.3...

如何让JAVA应用在Eclipse中也能调用shutdownhook

大家都知道 Eclipse的红色的Terminate按钮是强制关闭程序,她无法触发shutdownhook 关机钩,就像在linux下执行kill -9 一样的效果,那么,难道我们没有任何措施了吗?答...

Shutdown Hook

最近了解了一下Java中ShutdownHook的特性,网上有几篇讲述得很全面的文章,做些记录如下: 1、ShutdownHook在某些情况下不会运行 ShutdownHook从不不保证一定会运行...

JVM关闭钩子(1) —— 概念和应用

Hook-钩子 钩子(Hook) ,是一个处理消息的程序段,用于Windows消息处理机制,通过系统调用,把它挂入系统,当特定事件触发的时候执行。  如键盘钩子截获键盘消息,外壳钩子截取、启动和关闭...

How tomcat works——16 关闭钩子

概述在很多环境下,当用户在关闭应用程序时我们需要做一些清理工作。问题在于,用户并不是经常的按照预推荐流程来退出。例如,在 Tomcat 部署中通过初始化一个服务器(Server)并调用它的 start...

dubbo 钩子关闭

dubbo钩子关闭, 避免业务丢失
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关闭钩子(ShutdownHook)
举报原因:
原因补充:

(最多只允许输入30个字)