Posted on 2011-07-04 17:36
瘋狂 閱讀(1778)
評論(0) 編輯 收藏 所屬分類:
java
今天在閱讀Tomcat源碼的時候,catalina這個類中使用了下邊的代碼,不是很了解,所以google了一下,然后測試下方法,Tomcat中的相關代碼如下:
Runtime.getRuntime().addShutdownHook(shutdownHook);
這個方法的含義說明:
這個方法的意思就是在jvm中增加一個關閉的鉤子,當jvm關閉的時候,會執行系統中已經設置的所有通過方法addShutdownHook添加的鉤子,當系統執行完這些鉤子后,jvm才會關閉。所以這些鉤子可以在jvm關閉的時候進行內存清理、對象銷毀等操作。
一、編寫個測試類
package com.test.hook;
public class TestShutdownHook {
/**
* @param args
*/
public static void main(String[] args) {
// 定義線程1
Thread thread1 = new Thread() {
public void run() {
System.out.println("thread1...");
}
};
// 定義線程2
Thread thread2 = new Thread() {
public void run() {
System.out.println("thread2...");
}
};
// 定義關閉線程
Thread shutdownThread = new Thread() {
public void run() {
System.out.println("shutdownThread...");
}
};
// jvm關閉的時候先執行該線程鉤子
Runtime.getRuntime().addShutdownHook(shutdownThread);
thread1.start();
thread2.start();
}
}
打印結果:
thread2...
thread1...
shutdownThread...
或者:
thread2...
thread1...
shutdownThread...
結論:
無論是先打印thread1還是thread2,shutdownThread 線程都是最后執行的(因為這個線程是在jvm執行關閉前才會執行)。
轉載自:http://blog.csdn.net/wgw335363240/article/details/5854402