amp@java

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  99 随笔 :: 0 文章 :: 228 评论 :: 0 Trackbacks
通过
Runtime.getRuntime().addShutdownHook(Thread hook)
方法可以给当前的进程注册一个清理线程,当进程退出的时候,会执行线程中的代码。

1、为了统一清理线程的实现,可以做一个Destroyable接口,实现此接口的类都有一个destroy()方法,里面包含了该类的清理过程,例如关闭数据库连接、关闭Socket连接等。
Destroyable接口的代码:
 1 package net.blogjava.amplifier;
 2 
 3 /**
 4  * 建立此接口的目的是为了实现程序退出时的清理
 5  * 在Java控制台程序中,用户可以通过关闭命令行窗口或按下Ctrl+C来结束程序的运行
 6  * 这时候应该保证资源能够被正确释放,例如数据库的连接、Socket的连接应该关闭
 7  * 实现了本接口的类的实例引用可以由一个ShutdownHook线程来操作
 8  * 此线程在虚拟机退出时执行,详见Runtime.addShutdownHook()方法
 9  * @author amplifier
10  *
11  */
12 public interface Destroyable {
13     /**
14      * 实现本接口的类需要实现此方法,方法中包含该类的清理代码,
15      * 例如关闭数据库连接、关闭Socket连接等
16      *
17      */
18     void destroy();
19 }

2、建立一个继承于Thread的类ShutdownHook,里面的一个域是Destroyable实现类的引用,在该类的构造函数中可以传入该Destroyable实现类。
ShutdownHook的代码:
 1 package net.blogjava.amplifier;
 2 
 3 public class ShutdownHook extends Thread {
 4 
 5     private Destroyable desObj;
 6     
 7     public ShutdownHook(Destroyable desObj){
 8         this.desObj = desObj;
 9             }
10     
11     @Override
12     public void run() {
13         if(this.desObj!=null){
14             try{
15                 this.desObj.destroy();
16             }
17             catch (Exception e) {
18             }
19         }
20     }
21 
22     /** *//**
23      * @param args
24      */
25     public static void main(String[] args) {
26     
27 
28     }
29 
30 }

3、在main()方法中注册ShutdownHook。
 1     public static void main(String[] args){
 2         DestroyableImpl di = new DestroyableImpl();
 3         ShutdownHook sh = new ShutdownHook(di);
 4         Runtime.getRuntime().addShutdownHook(sh);
 5         Runtime.getRuntime().addShutdownHook(new Thread(){
 6             public void run(){
 7                 System.out.println("正在退出……");
 8             }
 9         });
10         di.otherMethod();
11     }
posted on 2007-04-12 10:08 amp@java 阅读(2622) 评论(0)  编辑  收藏 所属分类: Java common

只有注册用户登录后才能发表评论。


网站导航: