最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Runtime中shutdown hook的使用詳解

 更新時間:2013年05月17日 09:47:27   作者:  
本篇文章是對解析Runtime中shutdown hook的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
根據(jù) Java API, 所謂 shutdown hook 就是已經(jīng)初始化但尚未開始執(zhí)行的線程對象。在Runtime 注冊后,如果 jvm 要停止前,這些 shutdown hook 便開始執(zhí)行。聲明:Runtime.addShutdownHook(Thread t)
舉例如下:
復(fù)制代碼 代碼如下:

package john2;
 
/**
 * test shutdown hook
 * All rights released and correctness not guaranteed.
 */
public class ShutdownHook implements Runnable {

    public ShutdownHook() {
        // register a shutdown hook for this class.
        // a shutdown hook is an initialzed but not started thread, which will get up and run
        // when the JVM is about to exit. this is used for short clean up tasks.
        Runtime.getRuntime().addShutdownHook(new Thread(this));
        System.out.println(">>> shutdown hook registered");
    }

    // this method will be executed of course, since it's a Runnable.
    // tasks should not be light and short, accessing database is alright though.
    public void run() {
        System.out.println("/n>>> About to execute: " + ShutdownHook.class.getName() + ".run() to clean up before JVM exits.");
        this.cleanUp();
        System.out.println(">>> Finished execution: " + ShutdownHook.class.getName() + ".run()");
    }

        // (-: a very simple task to execute
    private void cleanUp() {
        for(int i=0; i < 7; i++) {
            System.out.println(i);
        }
    }

    /**
     * there're couple of cases that JVM will exit, according to the Java api doc.
     * typically:
     * 1. method called: System.exit(int)
     * 2. ctrl-C pressed on the console.
     * 3. the last non-daemon thread exits.
     * 4. user logoff or system shutdown.
     * @param args
     */
    public static void main(String[] args) {

        new ShutdownHook();

        System.out.println(">>> Sleeping for 5 seconds, try ctrl-C now if you like.");

        try {
            Thread.sleep(5000);     // (-: give u the time to try ctrl-C
        } catch (InterruptedException ie) {
            ie.printStackTrace();
        }

        System.out.println(">>> Slept for 10 seconds and the main thread exited.");
    }

}

也許有人會擔(dān)心性能問題,shutdown hook會不會占用太多的VM的資源,答案是shutdown hook不會占用VM太多的資源,因為shutdown hook 只是一個已初始化但尚未啟動的線程。這意味著它只在程序關(guān)閉的時候才會啟動,而不是在程序一開始運行時就啟動。而在大多數(shù)的Java平臺中,如果一個線程沒有啟動(即沒有調(diào)用線程的start()函數(shù))VM不會分配資源給線程。因此維護一群沒有啟動的線程不會給VM帶來太大的負(fù)擔(dān).
最后還要注意以下兩點:
如果VM crash,那么不能保證關(guān)閉掛鉤(shutdown hooks)能運行.試想一下如果Windows XP突然藍(lán)屏了那么本來計劃在關(guān)機之前的更新也就無法進(jìn)行了.
如果調(diào)用Runtime.halt()方法來結(jié)束程序的話,那么關(guān)閉掛鉤(shutdown hooks)也不會執(zhí)行

相關(guān)文章

  • JavaSE中compare、compareTo的區(qū)別

    JavaSE中compare、compareTo的區(qū)別

    本文主要介紹了JavaSE中compare、compareTo的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳談java命令的本質(zhì)邏輯揭秘

    詳談java命令的本質(zhì)邏輯揭秘

    一個簡單的java命令背后究竟做了些什么事情,很多朋友提出幾個問題,下面帶領(lǐng)大家一起學(xué)習(xí)Java命令的本質(zhì)邏輯問題,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Spring Boot整合swagger使用教程詳解

    Spring Boot整合swagger使用教程詳解

    這篇文章主要介紹了Spring Boot整合swagger使用教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java守護線程和用戶線程的區(qū)別

    Java守護線程和用戶線程的區(qū)別

    這篇文章主要介紹了Java守護線程和用戶線程的區(qū)別,用戶線程和守護線程,默認(rèn)情況下我們創(chuàng)建的線程或線程池都是用戶線程,所以用戶線程也被稱之為普通線程,下文更多詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • java 折半查找法(二分查找)實例

    java 折半查找法(二分查找)實例

    java 折半查找法(二分查找)實例,需要的朋友可以參考一下
    2013-03-03
  • Java正則表達(dá)式匹配電話格式

    Java正則表達(dá)式匹配電話格式

    正則表達(dá)式是由普通的字符以及特殊字符組成的文字模式,用來在查找文字主體時待匹配的一個或多個字符串。本文給大家介紹java正則表達(dá)式匹配電話格式,對java正則表達(dá)式匹配相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • java實現(xiàn)租車系統(tǒng)

    java實現(xiàn)租車系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)租車系統(tǒng),以及遇到的兩個問題解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談Java的WeakHashMap源碼

    淺談Java的WeakHashMap源碼

    這篇文章主要介紹了淺談Java的WeakHashMap源碼,WeakHashMap,從名字可以看出它是某種?Map,它的特殊之處在于?WeakHashMap?里的entry可能會被GC自動刪除,即使程序員沒有調(diào)用remove()或者clear()方法,需要的朋友可以參考下
    2023-09-09
  • mybatis 無參構(gòu)造器的使用

    mybatis 無參構(gòu)造器的使用

    本文主要介紹了MyBatis中無參構(gòu)造器的重要性和應(yīng)用,無參構(gòu)造器在Java類中具有特殊的意義,它確保了即使在沒有提供任何參數(shù)的情況下,也能夠創(chuàng)建對象并對其進(jìn)行初始化,下面就來介紹一下
    2024-10-10
  • Rocketmq事務(wù)消息之半消息詳解

    Rocketmq事務(wù)消息之半消息詳解

    這篇文章主要介紹了Rocketmq事務(wù)消息之半消息詳解,RocketMQ的事務(wù)消息支持在業(yè)務(wù)邏輯與發(fā)送消息之間提供事務(wù)保證,RocketMQ通過兩階段的方式提供事務(wù)消息的支持,需要的朋友可以參考下
    2023-09-09

最新評論

温宿县| 施甸县| 保靖县| 宜良县| 吉木乃县| 祁东县| 平谷区| 昌江| 苏尼特右旗| 济阳县| 凭祥市| 唐河县| 肇州县| 永靖县| 石渠县| 松溪县| 阿城市| 拉孜县| 铜陵市| 石渠县| 东乌珠穆沁旗| 景宁| 香港| 青田县| 鲁甸县| 唐海县| 梨树县| 方城县| 霞浦县| 嵩明县| 武定县| 电白县| 常宁市| 秭归县| 综艺| 浑源县| 河北区| 太谷县| 凌源市| 无极县| 眉山市|