문제

동기화 된 조항 내에서 예외를 던지는 불분명 한 부작용이 있습니까? 자물쇠는 어떻게됩니까?

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}
도움이 되었습니까?

해결책

부작용이 없습니다.

그만큼 잠금 장치는 종료됩니다 모든 경우에 예외는 예외는 아닙니다 (말장난 의도).

다른 팁

당신이 기대 하듯이, 자물쇠는 정상적으로 방출됩니다.

참고 로이 동작을 보장하는 JLS의 해당 섹션은 § 14.19:

블록의 실행이 정상적으로 완료되면 잠금이 잠금 해제되고 동기화 된 문이 정상적으로 완료됩니다. 어떤 이유로 든 블록의 실행이 갑자기 완료되면 잠금이 잠금 해제되고 동기화 된 명령문이 같은 이유로 갑자기 완료됩니다.

( '갑작스런 완료'는 JLS의 다른 곳에 정의되어 JVM의 예외, 예외가 throw, 및 사용 break, continue, 또는 return 블록 외부에서 전송하는 진술.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top