<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev@Free

    zJun's Tech Weblog

    為程序加上“關閉鉤子”(ShutdownHook)

    關閉鉤子”(ShutdownHook)是這樣一個概念:向虛擬機注冊一個線程,當程序退出(Ctrl+C)時虛擬機會啟動這個線程,我們可以在這個線程的run()中做一些清除的工作,如:釋放數據庫連接,關閉文件等.

    注冊:

    Runtime.getRuntime().addShutdownHook(Thread t); 

    注銷:

    Runtime.getRuntime().removeShutdownHook(Thread t);

    [例子]
    /**
     * 在這個線程中實現程序退出前的清理工作
     * 
     * @author Administrator
     * 
     
    */

    class TestThread extends Thread {
        boolean isTerminal 
    = false;

        
    public void run() {
            
    while (!isTerminal) {
                   try {
                      Thread.sleep(
    1000);
                   } catch (InterruptedException e) {
                      e.printStackTrace();
                   }
                System.out.println("run sub thread");
            }
        }

        
    /**
         * 清理工作
         
    */

        
    public void onTerminal() {
            isTerminal 
    = true;
            System.out.println("stop sun sub thread");
        }
    }

    /**
     * ShutdownDownHook測試類
     * 
     * @author Administrator
     * 
     
    */

    public class TestShutdownHook extends Thread {
        TestThread testThread;

        
    public void addThread(TestThread t) {
            testThread 
    = t;
        }

        
    /**
         * 實現程序退出前的清理工作
         
    */

        
    public void run() {
            System.out.println("This 
    is ShutdownHook");
            testThread.onTerminal();
        }

        
    public static void main(String[] args) {
            TestShutdownHook m 
    = new TestShutdownHook();
            TestThread t 
    = new TestThread();
            t.start();
            m.addThread(t);
            
    // 注冊退出處理線程
            Runtime.getRuntime().addShutdownHook(m);
        }
    }

    運行結果:

    run sub thread
    run sub thread
    run sub thread
    run sub thread
    This is ShutdownHook
    stop sun sub thread

    可以看到:當程序退出時啟動了TestThread線程,執行了定義的釋放工作。

    posted on 2006-03-12 23:38 zJun's帛羅閣 閱讀(3748) 評論(5)  編輯  收藏

    評論

    # re: 為程序加上“關閉鉤子”(ShutdownHook) 2006-03-13 09:09 anyfly

    你這個程序通得過???不會是死循環???樓主的知識點不錯,但程序一看就知道有問題了,樓主真得測試過?  回復  更多評論   

    # re: 為程序加上“關閉鉤子”(ShutdownHook) 2006-03-13 09:43 kavin

    @anyfly
    你先在你的機器上試試,看看會不會出現你說的問題?! 呵呵
      回復  更多評論   

    # re: 為程序加上“關閉鉤子”(ShutdownHook) 2006-03-13 11:32 zJun

    @anyfly
    使用Ctrl+C退出試試看。
    忘了說明一下,shutdownhook通常用來在Ctrl+C退出時觸發清理工作(多是在后臺服務中,這種服務通常是24*7運行的,正常情況下是不退出的),如果能夠在程序中顯式地確定退出的時機,那么最好是直接在退出前做清理,不用搞得這么復雜。  回復  更多評論   

    # re: 為程序加上“關閉鉤子”(ShutdownHook) 2006-03-13 14:38 wfeng007

    樓主的注釋寫錯了。。。 被注冊到shutdownhook上的是TestShutdownHook的實例作清理工作的也是TestShutdownHook的run() 他將無限循環的TestThread.run()中止了。  回復  更多評論   

    # re: 為程序加上“關閉鉤子”(ShutdownHook) 2006-03-13 18:43 zJun

    @wfeng007
    是的,謝謝指正。已更正。  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成色7777在线观看| 亚洲阿v天堂在线2017免费| 国产成A人亚洲精V品无码性色 | 曰批全过程免费视频播放网站| 亚洲精品无码MV在线观看| 国产精品午夜免费观看网站 | 免费观看黄网站在线播放| 亚洲国产超清无码专区| 91手机看片国产永久免费| 亚洲自国产拍揄拍| 特级淫片国产免费高清视频| 亚洲AV日韩AV永久无码色欲| 四虎影视永久免费视频观看| 深夜a级毛片免费视频| 久久亚洲2019中文字幕| 国产又黄又爽胸又大免费视频 | www永久免费视频| 国产亚洲精品精品国产亚洲综合| 中文字幕高清免费不卡视频| 日本亚洲视频在线| 97碰公开在线观看免费视频| 亚洲字幕AV一区二区三区四区 | 国产午夜成人免费看片无遮挡 | 亚洲va久久久噜噜噜久久男同| 久久综合给合久久国产免费| 亚洲一线产区二线产区精华| 国产美女无遮挡免费网站| 国产日韩AV免费无码一区二区三区| 亚洲成AV人片一区二区| 国内精品免费麻豆网站91麻豆 | 成人免费无码H在线观看不卡| 亚洲AV无码国产在丝袜线观看| 亚洲免费在线视频观看| 亚洲AV无码男人的天堂| 国产亚洲精品线观看动态图| 亚洲成年人免费网站| 色综合久久精品亚洲国产| 亚洲人成色77777| 日韩一区二区三区免费体验| a一级毛片免费高清在线| 亚洲精品综合久久中文字幕|