首頁  >  文章  >  Java  >  Java 關閉掛鉤

Java 關閉掛鉤

PHPz
PHPz原創
2024-08-30 16:05:59650瀏覽

Java中的一種特殊構造,允許開發人員製作一段程式碼的插件,該程式碼將在java虛擬機關閉期間執行,當我們必須在關閉期間執行清理操作時,這是非常必要的java虛擬機的down以及由於作業系統殺死請求或資源問題等原因而導致的虛擬機器關閉,不能用通用的構造來解決,而是可以使用shutdown提供的任意程式碼區塊來解決hook,它是java.lang.Thread類別的擴展,在java 虛擬機器關閉期間,在public void run() 方法內提供了必要的邏輯。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

Java 中 Shutdown Hook 的工作原理

  • java 虛擬機器有兩種不同的關閉方式。他們是:
    • 受控的過程。
    • 突然。
  • 當發生以下任一情況時,受控制的程序可能會導致 java 虛擬機器關閉:
    • 最後一個非守護線程的終止。例如,java虛擬機器隨著主執行緒的退出而開始關閉。
    • 作業系統發出中斷訊號。例如,從作業系統登出或按 CTRL + C。
    • exit() 是從 java 程式碼中呼叫的。
  • 當發生以下任何一種情況時,java 虛擬機器可能會突然關閉:
    • 如果作業系統發出終止訊號。
    • getRuntime().halt() 從 Java 程式碼中呼叫。
    • 主機作業系統意外死亡。例如,停電的情況。
  • java虛擬機器允許在系統關閉完成之前執行註冊的函數。使用這些功能可以釋放資源或執行某些內務活動。這些函數在 Java 虛擬機器術語中稱為 shutdown hooks。
  • 這些關閉鉤子都已啟動,但這些執行緒尚未啟動。當java虛擬機器開始關閉程序時,所有註冊的鉤子都會按照未指定的順序進行處理。 java虛擬機器在處理完所有的hook後將會停止。
  • 考慮下面的程式來示範 Java 中關閉鉤子的使用:

代碼:

//a class called mythr is defined and it extends a thread
class MyThr extends Thread
{
public void run()
{
System.out.println("The task of shut down hook is completed");
}
}
<em>//a class called shutdown is defined</em>
public class Shutdown
{
<em>//main method is called</em>
public static void main(String[] args)throws Exception
{
<em>//an instance of java runtime class is created</em>
Runtime roll=Runtime.getRuntime();
<em>//shutdown hook method is called using the instance of runtime class and the instance of mythr class is created</em>
roll.addShutdownHook(new MyThr());
System.out.println("The main starts to sleep. Press control and c to exit");
try
{
Thread.sleep(3000);
}
catch (Exception e)
{
}
}
}

上述程式的輸出如下圖:

Java 關閉掛鉤

在上面的程式中,定義了一個名為 mthr 的類,它擴充了一個執行緒。然後定義了一個名為shutdown的類別。然後呼叫main方法。然後建立一個java運行時類別的實例。然後使用運行時類別的實例呼叫 shutdown hook 方法,並建立 myhr 類別的實例。 shutdown 鉤子方法會導致 shutdown 類別中的 print 語句被印出來,然後是 myhr 類別的 run 方法中的語句。程式的輸出如上面的快照所示。

Java Shutdown Hook 範例

以下是下面提到的範例:

範例#1

Java程式示範在程式中使用shutdown hook:

代碼:

//a class called shutdown is defined
public class ShutDown
{
//main method is called
public static void main(String[] args)
{
//an instance of java runtime class is created and a new thread constructor is passed as a parameter to shutdown hook method
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
System.out.println("the shut down hook is in progress !");
}
});
System.out.println("Termination of application ...");
}
}

上述程式的輸出如下圖:

Java 關閉掛鉤

在上面的程式中,定義了一個呼叫關閉的類別。然後呼叫main方法。然後建立一個 java 運行時類別的實例,並將一個新的執行緒建構函式作為參數傳遞給 shutdown hook 方法。程式的輸出如上面的快照所示。

範例#2

Java程式示範在程式中使用shutdown hook:

代碼:

//a class called demo is defined
public class Demo
{
// a class called mess is defined and it extends a thread and this function is called when the program is exiting
static class Mess extends Thread
{
public void run()
{
System.out.println("Good Bye.");
}
}
//main method is called
public static void main(String[] args)
{
try
{
//shutdown hook method is called to which the instance of the class mess is passed as a parameter
Runtime.getRuntime().addShutdownHook(new Mess());
// the beginning of the program is printed
System.out.println("Beginning of the program...");
// the wait time for the thread is printed
System.out.println("The wait time for the thread is three seconds...");
Thread.sleep(3000);
//Ending of the program is printed
System.out.println("Ending of the program...");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

上述程式的輸出如下圖:

Java 關閉掛鉤

在上面的程式中,定義了一個mess類,它擴展了一個線程,並在程式退出時呼叫該函數。然後呼叫main方法。然後呼叫 shutdown 鉤子方法,將混亂類別的實例作為參數傳遞給該方法。然後列印程式的開頭。然後列印線程的等待時間。然後列印程式的結束訊息。程式的輸出如上面的快照所示。

Java Shutdown Hook 的優點

Java shutdown hook 有幾個優點。他們是:

  • java 虛擬機器的重要功能是關閉鉤子,因為它們提供了在 java 虛擬機器關閉時清理資源或儲存應用程式狀態的能力。
  • 當java虛擬機器正常或突然關閉時,關閉鉤子可以在執行時執行。
  • 透過運行時應用程式編程接口,可以在java虛擬機運行過程中的任意時間點註冊多個關閉鉤子。

結論

在本教程中,我們透過定義了解 Java 中關閉鉤子的概念,透過範例及其輸出了解 Java 中關閉鉤子的工作原理。

以上是Java 關閉掛鉤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Java 中的模板下一篇:Java 中的模板