`
w800927
  • 浏览: 119990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java shutdownhook

阅读更多

关闭钩子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优雅停机解决方案.docx

    ShutdownHook-Java 优雅停机解决方案 ShutdownHook 是 Java 语言提供的一种钩子机制,当 JVM 接受到系统的关闭通知之后,调用 ShutdownHook 内的方法,用以完成清理操作,从而平滑的退出应用。这种有计划平滑的...

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

    Java中得ShutdownHook提供了比较好的方案。  JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:  1)程序正常退出  2)使用...

    MUD-28:一个使用 Java RMI 的简单多用户地牢游戏

    RMI泥浆 跑步 make mud rmiregistry java src.MUDServerMainline <registry> ... 处理用户离开/加入服务器或 MUD,使用MUDServerMainline的shutdownhook MUDServerMainline和服务器端方法playerDisconnect

    kill命令在Java应用中使用的注意事项小结

    在Java应用中,特别是对于SpringBoot这类框架,开发者通常会注册一个`ShutdownHook`,这是一种在JVM退出前执行的回调机制。例如,在上面的代码中,当使用`Runtime.getRuntime().addShutdownHook()`方法注册了一个新...

    java多线程源码-ExecuteFramework:java多线程框架核心源码重写

    6. ShutdownHook:为了优雅地关闭线程池,通常会注册一个JVM关闭钩子(Shutdown Hook),在程序退出前,线程池能够完成正在执行的任务并清理资源。 通过研究ExecuteFramework-master源码,我们可以学习到如何设计和...

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

    14. **JVM关闭**:当JVM退出时,可能有一些线程还在运行,因此需要注册`ShutdownHook`,这是一组在JVM关闭时执行的钩子函数,用于执行必要的清理工作。 15. **关闭钩子(Shutdown Hook)**:通过`Runtime....

    springboot优雅停机实战demo

    2. **自定义ShutdownHook**: 可以通过注册一个Java的`ShutdownHook`来控制停机流程。在`SpringApplication.addListeners()`中添加一个监听器,当接收到停机信号时,执行你的清理逻辑,然后调用`System.exit(0)`来...

    解析Runtime中shutdown hook的使用详解

    在Java编程中,`Runtime`类的`shutdownHook`是一个重要的特性,它允许开发者在Java虚拟机(JVM)即将关闭时执行清理任务。本文将深入解析`shutdown hook`的使用,以及它在不同场景下的应用。 首先,`shutdown hook`...

    proxool教程.zip

    `ShutdownHook`是Java的机制,用于在JVM关闭时执行清理工作。更新Proxool库以修复此类问题,确保正常关闭连接池并释放资源。 综上所述,理解并正确配置Proxool连接池参数对于提升应用程序的性能和稳定性至关重要。...

    SpringBoot2.3新特性优雅停机详解

    在关闭服务端时,使用 kill -2 命令可以触发 Java 的 ShutdownHook 事件处理,而 kill -9 命令则会强制杀死进程,不会执行 ShutdownHook。 七、优雅停机的实现原理 优雅停机的实现原理是基于 Spring Boot 的 ...

    quartz定时任务

    在Java应用程序中,Quartz能够帮助我们实现定时任务,比如定时发送邮件、数据备份或者执行某些周期性的业务逻辑。 在Quartz中,配置是至关重要的,因为它决定了任务调度的方式和性能。上述描述中提到了几个关键的...

    spring与disruptor集成的简单示例

    同时,我们也使用了 Java 的 ShutdownHook 机制来确保资源的释放。 在业务逻辑中,我们可以使用 `BaseQueueHelper` 类来实现高性能的异步消息处理。例如,在应用 A 中,我们可以使用 `BaseQueueHelper` 类将数据...

    关于 Tomcat进程意外退出的问题解析

    `shutdownhook`是Java中的一个机制,允许在JVM退出前执行清理任务。如果应用程序代码中使用了`System.exit`,那么这将触发`shutdownhook`并导致Tomcat的退出。但在此案例中,代码层面的排查排除了`System.exit`的...

    spring-boot使用文档

    6. **ApplicationContext 创建**:根据配置创建 `ApplicationContext`,并根据需要设置 `ShutdownHook`、`BeanNameGenerator`、`ResourceLoader` 和 `Environment`。 7. **ApplicationContext 初始化**:加载 `...

    demo:构想dubbo + zookeeper + spring mvc

    demo 关于provider服务启动方式的说明: ...优点:框架本身提供(com.alibaba.dubbo.container.Main),可实现优雅关机(ShutdownHook) 第三种方式具体步骤: 1、pom.xml中配置打包操作 <!--打包可

Global site tag (gtag.js) - Google Analytics