program story

동기화 된 절 내에서 예외를 throw하면 부작용이 있습니까?

inputbox 2020. 11. 27. 08:05
반응형

동기화 된 절 내에서 예외를 throw하면 부작용이 있습니까?


동기화 된 절 내에서 예외를 throw하는 데 불분명 한 부작용이 있습니까? 자물쇠는 어떻게 되나요?

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

synchronized (lock) {   
    doSomething();       
}

부작용이 없습니다.

잠금이 종료 보장 모든 경우에 예외가 (말장난 의도)도 예외는 아니다.


원하는대로 잠금이 정상적으로 해제됩니다.

참고로이 동작을 보장하는 JLS의 적절한 섹션은 § 14.19입니다 .

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

( '급격한 완료'은 JVM에서 예외가 발생 예외 포함 할 JLS의 다른 정의 throw및 사용 break, continue또는 return블록 외부로 전송 문).

참고 URL : https://stackoverflow.com/questions/2019339/side-effects-of-throwing-an-exception-inside-a-synchronized-clause

반응형