[解決済み] JavaでSystem.exitを呼び出すべきタイミング
質問
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をシャットダウンし、シャットダウンフックを呼び出すでしょう。
なぜかシャットダウンフックは過小評価され、誤解されているメカニズムのようで、人々はプログラムを終了させるためにあらゆる種類の独自のカスタムハックで車輪を再発明しているようです。私はシャットダウンフックを使うことをお勧めします。 ランタイム どうせ使うことになるのだから。
関連
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] Javaでのスキャナが動作しない
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] Windowsのコマンドラインからアプリケーションの終了コードを取得するにはどうすればよいですか?