동기화 된 절 내에서 예외를 던지는 부작용?
-
19-09-2019 - |
문제
동기화 된 조항 내에서 예외를 던지는 불분명 한 부작용이 있습니까? 자물쇠는 어떻게됩니까?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
해결책
부작용이 없습니다.
그만큼 잠금 장치는 종료됩니다 모든 경우에 예외는 예외는 아닙니다 (말장난 의도).
다른 팁
당신이 기대 하듯이, 자물쇠는 정상적으로 방출됩니다.
참고 로이 동작을 보장하는 JLS의 해당 섹션은 § 14.19:
블록의 실행이 정상적으로 완료되면 잠금이 잠금 해제되고 동기화 된 문이 정상적으로 완료됩니다. 어떤 이유로 든 블록의 실행이 갑자기 완료되면 잠금이 잠금 해제되고 동기화 된 명령문이 같은 이유로 갑자기 완료됩니다.
( '갑작스런 완료'는 JLS의 다른 곳에 정의되어 JVM의 예외, 예외가 throw
, 및 사용 break
, continue
, 또는 return
블록 외부에서 전송하는 진술.)
제휴하지 않습니다 StackOverflow