try 또는 catch 블록이 인터럽트되는 동안 finally 블록이 실행되지 않는 경우는 언제입니까? 의사는 "try 또는 catch 코드를 실행하는 스레드가 중단되거나 죽으면 전체적으로 응용 프로그램이 계속 실행 되더라도 finally 블록이 실행되지 않을 수 있습니다." 누군가이 상황에 대한 모범을 보일 수 있습니까?try 또는 catch 블록이 인터럽트되는 동안 finally 블록이 실행되지 않는 경우
답변
좋은 답변은 here입니다.
System.exit()
외에 JVM이 어떤 이유로 든 (예 : try
블록의 무한 루프) 충돌하는 경우 finally 블록이 실행되지 않습니다.
한국인 실 자체로서,이 방법 stop()
(또는 resume()
없이 suspend()
)를 finally
블록이 실행되지 사용을 중단 한 경우에만. interrupt()
을 호출해도 여전히 finally
블록이 실행됩니다.
그것은 또한 finally
블록의 모든 return
문 또는 예외가 try
/catch
블록을 던졌습니다 어떤 수익을 우선하기 때문에, 프로그램 동작 신속이 당신에게 무슨 일이 생기면 디버깅하는 이상한 하드가 될 수 있다는 것을 주목할 가치가있다. 반대로 예방 조치를 취할 가치가있는 것은 아닙니다 (극히 드문 경우에만 발생합니다). 그러나 실제로 발생했을 때이를 인식 할 수있는 가치가 있습니다.
답장을 보내 주셔서 감사합니다.하지만 실제로 찾으려는 것은 ** 문장에서 중단 된 의미입니다. ** try 또는 catch 코드를 실행하는 스레드가 중단되거나 종료되면 finally 블록은 응용 프로그램 전체 계속됩니다. **. ** stop() ** 또는 ** suspend() **에 대한 중지를 의미합니까? 귀하의 대답과 마찬가지로 ** interrupt() ** 호출은 ** finally ** 실행을 중지하지 않습니다. – andy
당신이 찾고있는 것이 [this] (http://stackoverflow.com/questions/3590000/what-does-java-lang-thread-interrupt-do)입니까? –
네, 고마워요. – andy
finally
가 실행되지 만들 수있는 유일한 합법적 인 방법은 갑자기 전에 그것을, 예를 들어, 응용 프로그램을 종료하지 try
또는 catch
에 System.exit
또는 Runtime.halt
를 호출하는 것입니다
System.exit();
심지어 (예컨대
try
블록)
finally
블록 전에 창은
finally
후에 실행된다.
이는 일반적인 Java 실행의 봉투 밖 (주로) 인 것을 나타냅니다.
스레드가 (성공적으로)가
는 JLS에서 사용 된 의미에서 "종료"하지 않을 것이다 전화. 다른 스레드가try
블록 또는catch
블록System.exit()
를 호출하면System.exit()
을 호출하면 똑같은 일이 발생합니다. 이 경우 JVM 은 만 종료 훅을 실행합니다.JVM (하드)이 충돌하면 모든 Java 활동이 즉시 중단됩니다.
OS (하드)가 JVM 프로세스를 종료하면 모든 Java 활동이 즉시 중단됩니다.
는 CPU 칩의 전원이 꺼지면
...
- 1. try catch 블록이 필요합니까?
- 2. AsynchronousServerSocketChannel finally 블록이 실행되지 않았습니다.
- 3. catch 블록이 실행되지 않는 이유는 무엇입니까?
- 4. catch/try 블록이 Ruby에서 실행되지 않습니다.
- 5. 자바 스크립트 try/catch 블록이 실행되지 않는 이유는 무엇입니까?
- 6. finally 블록이 실행되지 않는 시나리오를 피하는 방법
- 7. catch 블록이 실행되지 않는 이유는 무엇입니까?
- 8. catch 블록에서 예외가 발생하면 finally 블록이 실행됩니까?
- 9. GCD @try @catch @finally
- 10. try/catch 블록이 예외를 catch하지 않습니다.
- 11. try/finally 블록이 있으면 가비지 컬렉터가 작동하지 않는 이유는 무엇입니까?
- 12. Python JSON try 블록이 작동하지 않는 경우
- 13. try/catch 블록이 예외를 catch하지 못함
- 14. catch 블록이 아닌 try 블록에서 예외가 발생합니까?
- 15. 자바에서 try catch 결과 finally
- 16. catch 블록이 C++ 프로그램에서 실행되지 않습니다.
- 17. TRY-CATCH 블록이 UDF 내에서 허용되지 않는 이유는 무엇입니까?
- 18. try 블록이 실행되기 전에 try 블록이 끝날 때까지 대기
- 19. 내 catch 블록이 필요합니까?
- 20. finally 블록이 반환되면 Xcode 디버거에서 예외를 catch 할 수 없습니다.
- 21. 내 catch 블록이 잡히지 않는 이유는 무엇입니까?
- 22. 새로운 Exception을 던져도 finally 블록이 실행됩니까?
- 23. 왜 함수 try 블록이 필요한가요?
- 24. try 블록이 비싼 이유는 무엇입니까?
- 25. Strange Catch Try Finally Error
- 26. finally 블록이 C#에서 작동하지 않는 이유는 무엇입니까?
- 27. SafeType의 블록이 작동하지 않는 경우
- 28. try catch finally 블록은 어떻게 작동합니까?
- 29. PHP 블록이 실행되지 않습니다.
- 30. sql try 블록에서 오류를 복구하려고 시도했습니다. catch 블록이 없습니다.
그래서 질문은 무엇인가? – Caveman42
@RAS 예, [마침내 항상 자바로 실행합니까?] (http://stackoverflow.com/questions/65035/does-finally-always-execute-in-java)에서 내가 알고 싶은 것을 찾았습니다. 그러나, 나는 그 질문과 동일하지 않다는 것을 의미합니다. 그러나 그 대답은 거기에 존재합니다. – andy