この質問にはすでに答えがあります。
私は取り組んでいますMy application's under maintanace module
try {
if (isUndermaintanace) {
System.exit(1);
} else {
prepareResources();
}
} catch (Exception e) {
printStack(e);
} finally {
cleanResources();
}
私が通り過ぎるときisundermaintanace
true
ついに実行されませんでした。
何が足りないの?他に方法はありますか?
Finally
VMを殺した場合(またはVMが他の方法で死んだ場合)は実行されません。 System.exit()はプログラムを強制終了するためのかなり粗雑な方法ですが、最後には高レベルのOOPの概念です。 System.exit()は非常に迅速に保釈され、できるだけ少ないクリーンアップを行います。
あなたがタスクマネージャに入り、プロセスを殺したか、またはkill -9
プロセス上であなたは最終的に実行することを期待しますか?漠然とです(非常に漠然と)同じこと。
注目に値することがいくつかあります。特に、私は記事の最初の部分で少しうそをついた。理解するのは誤解を招くSystem.exit()
本当に即座にプログラムを殺すこと。特に、シャットダウンフックが実行され、そして設定されている場合ファイナライザは実際に実行することができます。ただし、これらのドキュメントでは、使用しないことを強く強く推奨しています。runFinalizersOnExit
。
is there any other way to do that ??
? - user000001
System.exit
他のコードの実行を回避して、プログラムを直ちに終了します。finally
ブロック)。あなたが後にプログラムを終了したい場合finally
ブロックが実行され、代わりに例外がスローされます。
tryまたはcatchコードの実行中にJVMが終了した場合System.exit()
その場合、finallyブロックは実行されない可能性があります。同様に、tryまたはcatchコードを実行しているスレッドが中断または強制終了された場合、アプリケーション全体が継続していてもfinallyブロックは実行されない可能性があります。
唯一の例外的なケース最後にblockが実行されないのは、あなたが 'System.exit(1)'を呼び出す前です。finally block
これは期待される振る舞いです。System.exit(1)
JVMを終了します。
電話した場合System.exit()
あなたのコードは実行されませんfinally
その呼び出しはJVMを終了させるからです。
System.exit(1)
他の方法でアプリをシャットダウンする。 - Louis Wasserman