Java 鉤子函數編程技巧

Java提供註冊鉤子線程,在JVM進程關閉以前,會自動執行這個鉤子線程。ide

運用這個技巧,能夠再JVM關閉以前,釋放一些系統資源。函數

這個功能利用的是Runtime類來實現。spa

public class Hook {


    public static void main(String args[]){

        System.out.println("程序開始執行");
        try{
            Thread.sleep(100);
        }
        catch(Exception ex){

        }

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

            @Override
            public void run() {
                System.out.println("執行鉤子函數 -- " + 1);
            }
        });

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

            @Override
            public void run() {
                System.out.println("執行鉤子函數 -- " + 2);
            }
        });

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

            @Override
            public void run() {
                System.out.println("執行鉤子函數 -- " + 3);
            }
        });

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

            @Override
            public void run() {
                System.out.println("執行鉤子函數 -- " + 4);
            }
        });


        System.out.println("程序執行完畢,退出main");
    }
}

輸出線程

 能夠看到,執行順序和註冊順序是不一致的。通常也不會 註冊多個鉤子函數。code

程序開始執行
程序執行完畢,退出main
執行鉤子函數 -- 2
執行鉤子函數 -- 3
執行鉤子函數 -- 4
執行鉤子函數 -- 1

 

 同時,還提供了移除鉤子函數的功能blog

  public boolean removeShutdownHook(Thread hook)
相關文章
相關標籤/搜索