如何在程序異常或正常退出JVM時執行特定代碼

 通常情況下,我們一般調用System.exit()方法來退出JVM,查看System.exit()的設計可以發現這個方法調用了Runtime.getRuntime()exit()方法,參考Runtime類結構我們可以得到關於系統退出時有關更多的方法。
exit()
方法會使java JVM退出,在Jdk1.3中,如果使用addShutdownHook()方法註冊了一個線程,當通過調用exit()或通過用戶中斷(CTRL C)被關閉後,該線程將被激活調用,可以利用這一功能來在系統退出或異常退出捕捉這一時刻,做一些必要的退出操作。
shutdownhook(
關機鉤)的主要目的是在系統中斷後進行必要的清除,例如進行網絡關閉、關閉打開的文件等操作,可以通過addShutdownHook()方法註冊了一個這樣的關機鉤,並且允許你註冊多個關機鉤。在JVM退出之前,它會啓動所有已註冊的關機鉤,並讓這些關機鉤線程同步執行。在一個關機鉤執行之前可以使用removeShutdownHook()來刪除一個已註冊的關機鉤,也可以調用halt()不調用關機鉤線程直接退出JVM

下面是註冊關機鉤的例子,在addShutdownHook方法裏構造了一個局部類,這個局部類實現了在系統中斷退出時要執行的一些必要操作。在例子裏,同時註冊了兩個關機鉤。

 

import java.lang.*;

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



public class TestExit{

        public static void main(String[] args){

                System.out.println("my java process");

                //註冊一個關機鉤,當系統被退出或被異常中斷時,啓動這個關機鉤線程

                Runtime.getRuntime().addShutdownHook(new Thread(){                                       

                                        public void run(){

                                                //添入你想在退出JVM之前要處理的必要操作代碼

                                                System.out.println("T1");}

                                });

                //註冊第二個關機鉤               

                Runtime.getRuntime().addShutdownHook(new Thread(){

                                        public void run(){ System.out.println("T2");}

                                });



                System.exit(0);

        }

       

       

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章