1. ホーム
  2. java

[解決済み] JavaでSystem.exitを呼び出すべきタイミング

2022-03-10 12:10:03

質問

Javaでは、以下のような違いがあります。 System.exit(0) を次のコードに追加してください。

public class TestExit
{      
    public static void main(String[] args)
    { 
        System.out.println("hello world");

        System.exit(0);  // is it necessary? And when it must be called? 
    }      
}

ドキュメント とあるが、これはどういう意味だろうか。

解決方法は?

System.exit() を実行するために使用することができます。 シャットダウンフック を、プログラムが終了する前に実行します。これは、プログラムのすべての部分がお互いを意識することができない (そして、意識すべきでない) 大きなプログラムにおいて、シャットダウンを処理するのに便利な方法です。そして、もし誰かが終了したいときには、単に System.exit() そして、シャットダウンフックが (適切に設定されていれば) ファイルのクローズやリソースの解放など、必要なシャットダウンセレモニーをすべて行ってくれるのです。

このメソッドは決して正常には戻りません。

プログラムを終了させるもう一つの、おそらくより一般的な方法は、単に main メソッドを使用します。しかし、もし非デーモンスレッドが実行中であれば、それらはシャットダウンされず、したがってJVMは終了しません。したがって、そのような非デーモンスレッドがある場合、すべての非デーモンスレッドをシャットダウンして他のリソースを解放するために、(シャットダウンフック以外の)何か他の手段が必要です。もし、他の非デーモンスレッドがない場合、以下のように main は、JVMをシャットダウンし、シャットダウンフックを呼び出すでしょう。

なぜかシャットダウンフックは過小評価され、誤解されているメカニズムのようで、人々はプログラムを終了させるためにあらゆる種類の独自のカスタムハックで車輪を再発明しているようです。私はシャットダウンフックを使うことをお勧めします。 ランタイム どうせ使うことになるのだから。