amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          通過
          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
          主站蜘蛛池模板: 裕民县| 新民市| 安乡县| 桃源县| 平顺县| 大同市| 新营市| 绥芬河市| 铁力市| 太仓市| 雅江县| 萨迦县| 永安市| 潼南县| 开江县| 仪陇县| 阿勒泰市| 白朗县| 宝鸡市| 云浮市| 南漳县| 太仓市| 彩票| 南岸区| 桐庐县| 岗巴县| 淮安市| 洛浦县| 常熟市| 昌都县| 桐庐县| 广宁县| 赞皇县| 阳信县| 怀远县| 田东县| 达孜县| 山东| 江华| 且末县| 东城区|