`

Java应用程序 退出事件响应

阅读更多
  最近一直在跟随着师兄做监控的部分,之前在学校只是做过几个curd类型的小项目,因此在面对此次任务的时候既兴奋又紧张。兴奋的是我开始做高级一点的东西了,紧张的是我有太多的未知。首先开始阅读监控部分的源代码,其中多次看到addHookShutDown()之类的方法,之前没有接触于是索性学习了一番。
 
  一个完整的Java应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束,我以往的做法都是让程序自然结束。
   如:
package com.apusic.thread;

public class ThreadHookTest {

	public static void main(String[] args) {
		System.out.println("haha yao is very great");
		
	}
}

   对于简单的应用系统,我们直接可以在System.exit(0)代码执行前,添加需要在应用程序退出前需要完成的工作,如:关闭网络连接,关闭数据库连接等。
    然而,对于比较复杂的多线程应用,如我现在在做的网络监控,线程运行的状态较复杂,我们就很难预料程序何时结束,如何能在应用程序结束事件到来时,处理我们要做的工作呢?

——————————Java对应用程序的退出的事件出处理机制————————————
    对当前应用程序对象的获得,Java通过Runtime静态方法:Runtime.getRuntime()通过Runtime的 void addShutdownHook(Thread hook) 法向Java虚拟机注册一个shutdown钩子事件,这样一旦程序结束事件到来时,就运行线程hook,我们在实际应用时候,只要将程序需要完成之前做的一些工作直接通过线程hook来完成。具体演示代码如下:
 
   
package com.apusic.thread;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;


public class ThreadHookTest {
	
	public ThreadHookTest(){
		doShutDownWork();
	}

	/**
	 * 当应用程序退出时往d://test.log中写当前日志
	 */
    private void doShutDownWork(){
    	Runtime.getRuntime().addShutdownHook(new Thread(){
    		public void run() {
    			FileWriter fw = null;
					try {
						fw = new FileWriter("d:\\test.log");
						System.out.println("testing is started");
						fw.write("Hell yao"+new Date().toString());
						
					} catch (IOException e) {
						System.out.println("写文件失败");
						e.printStackTrace();
					}finally{
						try {
							fw.close();
						} catch (IOException e) {
							System.out.println("FileWriter关闭失败");
							e.printStackTrace();
						}
					}
				}
    		});
    }
	
    public static void main(String[] args) {
    	ThreadHookTest test = new ThreadHookTest();
    	long start = System.currentTimeMillis();
    	for(int i=0; i<100; i++){
    		//处理你的业务逻辑
    		System.out.println("i love rock and roll");
    	}
    	long end = System.currentTimeMillis();
    	System.out.println("业务执行时间为: "+(end-start));
	}
    
}

    在上述程序中,我们可以看到通过在程序中增加Runtime.getRuntime().addShutdownHook(new Thread()) 事件监听,捕获系统退出消息到来,然后,执行我们所需要完成工作,从而使我们的程序更健壮!
  
   拓展之: System类的System.exit(int arg)方法
            Runtime类的exit(int arg)方法和addShutdownHook(Thread hook)方法
            ... ... 查看API, 用心去理解。

   
分享到:
评论

相关推荐

    java 程序的退出的资源

    在提供的文件列表中,`Exit.java`可能是实现程序退出示例的源代码,而`Java.jpg`可能是与Java程序退出相关的流程图或示意图。实际开发中,阅读和理解这类代码和图形可以帮助我们更好地掌握Java程序退出的原理和实践...

    为Java应用程序添加退出事件响应

    一个完整的Java应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让...

    使用Java servlet实现自动登录退出功能

    使用Java Servlet实现自动登录退出功能是Web应用程序中一个非常重要的功能,本文将详细介绍如何使用Java Servlet实现自动登录退出功能。 知识点1:了解Java Servlet Java Servlet是一个Java类库,用于开发基于Web...

    记事本设计 JAVA程序设计

    【标题】"记事本设计 JAVA程序设计"揭示了这个项目是使用Java编程语言实现的一个类似于Windows记事本的应用程序。在Java中,记事本的设计通常涉及到GUI(图形用户界面)的创建,使得用户可以编辑文本,改变字体样式...

    java应用小程序代码

    通过以上分析可以看出,这个Java程序是一个典型的GUI应用示例,它演示了如何使用AWT库创建简单的图形用户界面,同时实现了基本的数据输入、处理和显示功能。尽管代码较为简单,但它涵盖了GUI编程的基本要素,对于...

    《Java程序性能优化》(葛一鸣)PDF版本下载.txt

    《Java程序性能优化》这本书主要探讨了如何通过各种技术和策略来提高Java应用程序的性能。 ### 性能瓶颈分析 - **CPU使用率高**:程序执行时,某些部分可能过度消耗CPU资源,导致性能下降。 - **内存泄漏**:对象...

    java系统程序说明文档

    【Java系统程序说明文档】 Java是一种广泛使用的编程语言,尤其在企业级应用开发中占据重要地位。本系统采用Java编写,旨在为企业提供一个全面的人事管理解决方案,满足现代企业管理的需求。以下是该系统的关键知识...

    Java gui简单程序

    在Java编程领域,GUI(图形用户界面)是创建桌面应用程序不可或缺的一部分。本示例程序"Java GUI简单程序"旨在教你如何构建一个基本的GUI界面,同时整合数据库连接、查询功能,并利用JTable来展示查询结果。这是一个...

    java常见事件响应方法实例汇总

    Java事件处理是GUI编程的核心部分,它使得用户与应用程序进行交互。在Java中,事件响应通常涉及以下几个关键概念:事件源(Event Source)、事件(Event)、事件监听器(Event Listener)和事件处理方法(Event ...

    打飞碟JAVA程序.rar_javaufo末日余辉_java程序

    标题中的“打飞碟JAVA程序.rar_javaufo末日余辉_java程序”指的是一个基于Java编程语言开发的游戏,名为“打飞碟”。这个程序可能是由开发者为了展示其编程技能或者提供一种娱乐方式而创建的。游戏主题可能与科幻...

    java 实现简单的记事本程序

    7. **程序退出**:在“退出”功能中,我们不仅要关闭程序窗口,还需要确保所有的资源(如打开的文件)已正确释放。这可以通过在`JFrame`上设置`DefaultCloseOperation`为`JFrame.EXIT_ON_CLOSE`来实现。 通过以上...

    java抽奖程序课程设计

    此Java抽奖程序设计为一个图形用户界面(GUI)应用,旨在通过随机算法实现抽奖过程,包含奖项设置、概率分配、抽奖按钮和结果展示等功能。程序利用了`java.applet.Applet`框架进行构建,展示了基本的事件监听器模式...

    经典Java程序源代码

    这些程序示例不仅反映了Java编程语言在桌面应用程序开发中的应用,也揭示了面向对象编程(OOP)的核心概念,如类的继承、接口实现、事件处理机制,以及对用户输入和界面的响应。对于学习Java编程、了解Swing组件使用...

    Java语言程序设计课程设计实训项目——应用Java-Swing-GUI组件技术实现课程选课系统GUI窗口(第1部分).pdf

    【Java Swing GUI组件技术】是Java程序设计中用于构建图形用户界面的重要工具。在这个课程设计实训项目中,学生被要求使用Java Swing库来创建一个课程选课系统的图形用户界面(GUI)。具体来说,主要涉及以下几个...

    简单的java爬虫程序

    Java爬虫是一种使用Java编程语言编写的应用程序,它能够自动地在网络上抓取信息,从一个或多个网页开始,按照特定的规则遍历互联网上的页面。这个"简单的Java爬虫程序"提供了从指定URL开始,按照广度优先策略抓取...

    java swing综合程序

    在"Java Swing综合程序"中,你会学习如何布局这些组件,如何处理用户的交互事件,以及如何使用ActionListener和其他监听器来响应用户的操作。此外,你还会接触到布局管理器,如BorderLayout、GridLayout和FlowLayout...

    Java定时关机小程序

    - **关闭线程**:在程序退出或取消定时关机时,确保所有打开的线程、流或其他资源得到适当的清理和关闭。 9. **打包与部署**: - **Eclipse工程**:Eclipse是一个流行的Java集成开发环境,用于编写、调试和打包...

    java写的小程序五子棋

    在Java编程语言中,开发一个五子棋小程序涉及到多个核心知识点。下面将详细解析这些关键概念和步骤: 1. **基础语法与环境搭建**:Java是面向对象的编程语言,编写程序前需安装JDK(Java Development Kit)并设置...

    java并发程序设计

    Java并发程序设计是Java编程技术中一个重要的领域,它涉及如何在多线程环境下编写有效且安全的代码。本文将从以下几个方面详细讲解Java并发程序设计的核心知识点: 1. 使用线程的经验:线程是并发程序的基础,包括...

    JAVA鼠标事件

    在Java编程语言中,鼠标事件是...理解这些事件的类型和如何注册监听器对于任何希望在Java应用程序中实现高级用户交互的开发者来说都是至关重要的。通过实践和探索,你将能够利用这些事件来提升你的应用程序的用户体验。

Global site tag (gtag.js) - Google Analytics