2011-12-29 26 views
2

previous questionJVM在調用暫停之前允許關閉鉤子運行多久?

跟進如果你已經閱讀了前面的問題的備選標題可能是:
應該多久我守護的檢查,看它是否被中斷?

+2

你看過了源代碼嗎? – 2011-12-29 02:34:13

+0

@StephenC請參見[上一個問題]中的評論(http://stackoverflow.com/questions/8663107/how-does-the-jvm-terminate-daemon-threads-or-how-to-write-daemon-threads-that -t/8663314#8663314) – 2011-12-29 02:43:00

回答

4

當JVM發出信號退出時,它運行一個關閉進程,它啓動所有的關閉鉤子線程,然後等待它們完成。由操作系統決定需要等待多長時間,這取決於用於啓動終止進程的方法。如果信號使用Ctrl +過程

public static void main (String[] args) throws InterruptedException { 
    Runtime.getRuntime().addShutdownHook (new Thread() { 
     @Override 
     public void run() { 
      System.out.println ("Shutdown hook"); 
      while (true) { } 
     } 
    }); 

    while (true) { 
     System.out.println ("Looping"); 
     Thread.sleep (10000); 
    } 
} 

C的方法將啓動關閉掛鉤,但從來沒有完成:你可以像一個簡單的測試程序試試自己這一點。如果您在關閉掛鉤中刪除忙環,掛鉤完成後您會看到它終止。

2

jvm執行關機。寬限期基於操作系統和AFAIK,我們沒有任何控制來配置它。

+0

對不起,您能否詳細說明/重述?如果退出和暫停之間沒有「寬限期」,關閉掛鉤何時運行? – 2011-12-29 17:26:44

+0

謝謝,請編輯您的答案以包含該評論,並將其標記爲已接受。 – 2011-12-29 17:42:48

+0

已編輯。謝謝。 – kosa 2011-12-29 19:29:38

相關問題