ホームページ  >  記事  >  Java  >  Java シャットダウン フック

Java シャットダウン フック

PHPz
PHPzオリジナル
2024-08-30 16:05:59649ブラウズ

開発者が Java 仮想マシンのシャットダウン中に実行されるコードのプラグインを実行できるようにする Java の特別な構造。これは、シャットダウン中にクリーンアップ操作を実行する必要がある場合に非常に必要です。 Java仮想マシンのダウンや、オペレーティングシステムによるリクエストの強制終了やリソースの問題などの理由による仮想マシンのシャットダウンは、一般的な構成では解決できませんが、シャットダウンによって提供される任意のコードブロックを使用することで解決できます。フックは java.lang.Thread クラスの拡張であり、必要なロジックは Java 仮想マシンのシャットダウン中に public void run() メソッド内に提供されます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java でのシャットダウンフックの動作

  • Java 仮想マシンをシャットダウンするには 2 つの異なる方法があります。彼らです:
    • 制御されるプロセス。
    • 突然。
  • 次のいずれかが発生すると、制御されているプロセスによって Java 仮想マシンがシャットダウンされる可能性があります。
    • 最後の非デーモンスレッドを終了します。たとえば、Java 仮想マシンはメインスレッドの終了とともにシャットダウンを開始します。
    • オペレーティングシステムから割り込み信号が送信されます。たとえば、オペレーティング システムからログオフするか、CTRL + C を押します。
    • exit() は Java コードから呼び出されます。
  • 次のいずれかが発生すると、Java 仮想マシンが突然シャットダウンを開始することがあります。
    • オペレーティング システムから Kill シグナルが送信された場合。
    • getRuntime().halt() は Java コードから呼び出されます。
    • ホスト オペレーティング システムの予期せぬ死。たとえば、停電の場合です。
  • Java 仮想マシンでは、システムのシャットダウンが完了する前に、登録された機能を実行できます。これらの機能を使用して、リソースを解放したり、特定のハウスキーピング アクティビティを実行したりできます。これらの関数は、Java 仮想マシン用語ではシャットダウン フックと呼ばれます。
  • これらのシャットダウン フックはすべて開始されていますが、これらのスレッドは開始されていません。登録されたすべてのフックは、Java 仮想マシンがシャットダウンのプロセスを開始するときに、指定されていない順序で処理されます。 Java 仮想マシンは、すべてのフックを処理した後に停止します。
  • 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 ランタイム クラスのインスタンスが作成されます。次に、ランタイム クラスのインスタンスを使用してシャットダウン フック メソッドが呼び出され、mythr クラスのインスタンスが作成されます。メソッド shutdown フックにより、shutdown クラスの print ステートメントが print print され、続いて mythr クラスの run メソッドのステートメントが印刷されます。プログラムの出力は、上のスナップショットに示されているとおりです。

Java シャットダウンフックの例

以下に挙げる例を次に示します:

例 #1

プログラム内でのシャットダウン フックの使用例を示す Java プログラム:

コード:

//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 ランタイム クラスのインスタンスが作成され、新しいスレッド コンストラクターがパラメータとしてシャットダウン フック メソッドに渡されます。プログラムの出力は上のスナップショットに示されています。

例 #2

プログラム内でのシャットダウン フックの使用例を示す Java プログラム:

コード:

//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 フック メソッドが呼び出され、クラス mess のインスタンスがパラメータとして渡されます。次に、プログラムの先頭が出力されます。次に、スレッドの待ち時間が出力されます。その後、番組のエンディングが出力されます。プログラムの出力は、上のスナップショットに示されているとおりです。

Java シャットダウンフックの利点

Java シャットダウン フックにはいくつかの利点があります。それらは次のとおりです:

  • Java 仮想マシンの重要な機能はシャットダウン フックです。これは、Java 仮想マシンのシャットダウン時にリソースのクリーンアップやアプリケーションの状態の保存を行う機能を提供するためです。
  • シャットダウン フックは、Java 仮想マシンが正常にシャットダウンするとき、または突然シャットダウンするときに実行時に実行できます。
  • Java 仮想マシンの実行中の任意の時点で、ランタイム アプリケーション プログラミング インターフェイスを通じて複数のシャットダウン フックを登録できます。

結論

このチュートリアルでは、定義を通じて Java のシャットダウン フックの概念を理解し、例とその出力を通じて Java のシャットダウン フックの動作を理解します。

以上がJava シャットダウン フックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。