Java中RunTime.getRunTime().addShutdownHook用法


今天在閱讀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執行關閉前才會執行)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM