<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帛羅閣 閱讀(3741) 評論(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)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线观看亚洲免费| 处破痛哭A√18成年片免费| 亚洲国产成人影院播放| 亚洲精品V天堂中文字幕| 在线观看免费大黄网站| 亚洲综合精品伊人久久| 日韩a级毛片免费视频| 美女18毛片免费视频| 亚洲精品高清在线| 成在人线av无码免费高潮水 | 91视频精品全国免费观看| 33333在线亚洲| 日韩精品视频免费网址| 免费无码AV一区二区| 亚洲一区二区三区在线视频| 高清永久免费观看| 无码专区—VA亚洲V天堂| 亚洲成人免费网站| 亚洲欧美熟妇综合久久久久| 免费中文字幕在线| 免费播放在线日本感人片| 亚洲国产精品成人久久久| 午夜私人影院免费体验区| 一级做a爰片性色毛片免费网站 | 国产男女猛烈无遮挡免费网站| 特级aa**毛片免费观看| 日韩亚洲欧洲在线com91tv| 最好看最新的中文字幕免费| 亚洲欧美成aⅴ人在线观看| 亚洲精品国产自在久久| 久久久久免费看成人影片| 亚洲欧美日韩中文字幕一区二区三区| 成人亚洲网站www在线观看| 国产在线一区二区综合免费视频| 亚洲三级在线播放| 亚洲情a成黄在线观看| 国产高清不卡免费在线| 七次郎成人免费线路视频| 亚洲自偷精品视频自拍| 夜色阁亚洲一区二区三区| **实干一级毛片aa免费|