이 질문에는 이미 답변이 있습니다.
나는 노력하고있다.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()
진정으로 즉시 프로그램을 죽이는 것. 특히 셧다운 훅이 실행되고구성된 경우, finalizers 실제로 실행할 수 있습니다. 그러나, 문서는 사용에 대해 상당히 강력하게 제안합니다.runFinalizersOnExit
.
is there any other way to do that ??
? - user000001
System.exit
다른 코드 실행을 우회하여 즉시 종료됩니다 (예 :finally
블록). 프로그램 종료 후finally
블록이 실행되고 대신 예외가 발생합니다.
try 또는 catch 코드가 실행되는 동안 JVM이 종료되면 예를 들어System.exit()
finally 블록은 실행되지 않을 수 있습니다. 마찬가지로 try 또는 catch 코드를 실행하는 스레드가 인터럽트되거나 종료되면 전체적으로 응용 프로그램이 계속 실행 되더라도 finally 블록이 실행되지 않을 수 있습니다.
유일한예외적 인 경우마지막으로 블록이 실행되지 않는 곳은 'System.exit (1)'을finally block
, 이는 예상 된 동작입니다.System.exit(1)
JVM을 종료합니다.
전화하면System.exit()
코드가 실행되지 않습니다.finally
이 호출은 JVM을 종료하기 때문입니다.
System.exit(1)
다른 방법으로 앱을 종료 할 수 있습니다. - Louis Wasserman