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

Java ShutdownHook

    博客分类:
  • j2ee
阅读更多

关键字: shutdownhook

要想在JVM关闭的时候,来执行程序的一些操作,比如:保存一些该保存的日志,数据等,我们可以利用JDK提供的ShutdownHook钩子来实现。

JDK中定义:public void addShutdownHook(Thread hook);

即向虚拟机添加关闭的钩子程序. 请注意, 该 hook 线程必须是已经初始化但是没有运行的线程, 这个线程将在虚拟机响应用户的中断之前运行, 例如按下 ^C, 或者系统范围的事件, 例如注销或者关闭系统时.

下面是个简单的例子:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFrame;

/*
 * @author Seyo <SEYO816@GMAIL.COM />
 */
public class Application extends JFrame {

	private FileWriter fw_log;
	private BufferedWriter bw_log;

	public static void main(String[] args) throws Exception {
		Application frame = new Application();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.processApp1();
		frame.setVisible(true);
	}

	public Application() throws IOException {
		fw_log = new FileWriter("log.txt");
		bw_log = new BufferedWriter(fw_log);

		setSize(200, 100);

		setLocation(100, 100);

		setTitle("Test for ShutdownHook");
		
	   Runtime.getRuntime().addShutdownHook(new Thread() {
           public void run() {
               endApp();
           }
       });;

	}
	
	
	public void processApp1() throws IOException {
		bw_log.write("testing");
		bw_log.newLine();
	}

	// close the log file

	public void endApp() {
		try {
			bw_log.close();
		} catch (IOException e) {
			System.err.println(e);
		}
	}

}

 

该程序运行的时候打开一个简单的窗口,我们要实现的是在关闭窗口后,往log.txt写入:testing 。只需要在构造函数中加入:

Runtime.getRuntime().addShutdownHook(new Thread() {
           public void run() {
               endApp();//为程序中自定义的代码。
           }

 来自:http://www.yangxinyong.com/blog/entry/2008_11_16_71.html

分享到:
评论

相关推荐

    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 &lt;registry&gt; ... 处理用户离开/加入服务器或 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中配置打包操作 &lt;!--打包可

Global site tag (gtag.js) - Google Analytics