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

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 三年片在线观看免费大全电影 | 污网站在线观看免费| 亚洲一区二区高清| **真实毛片免费观看| 久久久久亚洲精品无码网址色欲| 亚洲精品国产福利一二区| 日本免费污片中国特一级| 精品亚洲AV无码一区二区三区| 亚洲A丁香五香天堂网| 最新黄色免费网站| xvideos永久免费入口| 亚洲乱码一二三四区麻豆| 国产日韩成人亚洲丁香婷婷| 亚洲免费中文字幕| 黄色网址免费在线观看| 亚洲一区二区三区播放在线 | 在线亚洲高清揄拍自拍一品区| 亚洲午夜精品久久久久久浪潮| 无码精品A∨在线观看免费| j8又粗又长又硬又爽免费视频| 亚洲无吗在线视频| 亚洲av日韩av天堂影片精品| 国产免费人成在线视频| 91精品成人免费国产片| 久久久久久久久久免免费精品| 亚洲日韩精品无码AV海量| 亚洲欧洲日产国产综合网| 亚洲最大av无码网址| 色播在线永久免费视频| 18女人腿打开无遮掩免费| 精品一区二区三区免费视频| 激情无码亚洲一区二区三区| 亚洲国产精品成人精品软件| 欧洲亚洲国产清在高| 亚洲国产综合久久天堂| 免费的一级片网站| 国国内清清草原免费视频99| 午夜精品一区二区三区免费视频| 一个人看的在线免费视频| 白白色免费在线视频| 亚洲av永久无码|