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 閱讀(2651) 評論(0)  編輯  收藏 所屬分類: Java common
          主站蜘蛛池模板: 新密市| 泗阳县| 叶城县| 保康县| 屯留县| 开平市| 江门市| 安图县| 昭苏县| 封丘县| 台北市| 通榆县| 阳西县| 石林| 正蓝旗| 松溪县| 英山县| 库尔勒市| 武城县| 苍梧县| 扶绥县| 招远市| 大洼县| 佛教| 伊通| 察隅县| 普兰店市| 福建省| 辽源市| 杂多县| 邹平县| 房山区| 芜湖市| 海原县| 呼和浩特市| 子洲县| 迁安市| 江门市| 丹巴县| 荃湾区| 塘沽区|