一个完整的Java应用程序通常至少要有一个应用程序的结束点对于一般程序来说系统开发者根据需要和个人的偏好会在程序结束位置通过添加Systemexit()或Systemout()来结束程序或不加这些指令让程序自然运行到结束
如下列典型代码
package untitled;
/**
* This application is to demo how an applcation end
*/
public class Test {
public Test() {}
public static void main(String[] args) {
Test test = new Test();
//
Systemoutprintln(hello world);
//Do something before system exit
Systemexit();//也可以不写这句代码让程序自然结束
}
}
对于简单的应用系统我们直接可以在Systemexit()代码执行前添加需要在应用程序退出前需要完成的工作如关闭网络连接关闭数据库连接等
然而对于比较复杂的多线程应用线程运行的状态较复杂我们就很难预料程序何时结束如何能在应用程序结束事件到来时处理我们要做的工作呢?这就用到了Java对应用程序的退出的事件出处理机制
对当前应用程序对象的获得Java通过Runtime静态方法RuntimegetRuntime()通过Runtime的 void addShutdownHook(Thread hook) 法向Java虚拟机注册一个shutdown钩子事件这样一旦程序结束事件到来时就运行线程hook我们在实际应用时候只要将程序需要完成之前做的一些工作直接通过线程hook来完成具体演示代码如下
/*****************************************************************************
本程序仅演示如何在Java应用程序中添加系统退出事件处理机制
*****************************************************************************/
package untitled;
import javautil*;
import javaio*;
/**
* This application is used to demo how to hook the event of an application
*/
public class Untitled {
public Untitled() {
doShutDownWork();
}
/***************************************************************************
* This is the right work that will do before the system shutdown
* 这里为了演示为应用程序的退出增加了一个事件处理
* 当应用程序退出时候将程序退出的日期写入 d:\tlog文件
**************************************************************************/
private void doShutDownWork() {
RuntimegetRuntime()addShutdownHook(new Thread() {
public void run() {
try {
FileWriter fw = new FileWriter(d:\\tlog);
Systemoutprintln(Im going to end);
fwwrite(the application ended! + (new Date())toString());
fwclose();
}
catch (IOException ex) {
}
}
});
}
/****************************************************
* 这是程序的入口仅为演示方法中的代码无关紧要
***************************************************/
public static void main(String[] args) {
Untitled untitled = new Untitled();
long s = SystemcurrentTimeMillis();
for (int i = ; i < ; i++) {
//在这里增添您需要处理代码
}
long se = SystemcurrentTimeMillis();
Systemoutprintln(se s);
}
}
在上述程序中我们可以看到通过在程序中增加RuntimegetRuntime()addShutdownHook(new Thread()) 事件监听捕获系统退出消息到来然后执行我们所需要完成工作从而使我们的程序更健壮!