반응형
동기화 된 절 내에서 예외를 throw하면 부작용이 있습니까?
동기화 된 절 내에서 예외를 throw하는 데 불분명 한 부작용이 있습니까? 자물쇠는 어떻게 되나요?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
부작용이 없습니다.
잠금이 종료 보장 모든 경우에 예외가 (말장난 의도)도 예외는 아니다.
원하는대로 잠금이 정상적으로 해제됩니다.
참고로이 동작을 보장하는 JLS의 적절한 섹션은 § 14.19입니다 .
Block의 실행이 정상적으로 완료되면 잠금이 해제되고 동기화 된 문이 정상적으로 완료됩니다. 어떤 이유로 든 블록 실행이 갑자기 완료되면 잠금이 해제되고 동기화 된 명령문이 같은 이유로 갑자기 완료됩니다.
( '급격한 완료'은 JVM에서 예외가 발생 예외 포함 할 JLS의 다른 정의 throw및 사용 break, continue또는 return블록 외부로 전송 문).
반응형
'program story' 카테고리의 다른 글
| 실제 서버가 deflate 인코딩보다 gzip을 선호하는 이유는 무엇입니까? (0) | 2020.11.28 |
|---|---|
| Git에서 로컬 변경 사항이 푸시되지 않도록 방지 (0) | 2020.11.28 |
| 왜 java.security.NoSuchProviderException 그런 공급자가 없습니까 : BC? (0) | 2020.11.27 |
| Visual Studio에서 우선 순위가 높은 TODO 주석을 어떻게 추가합니까? (0) | 2020.11.27 |
| NetBeans- 'Go to Declaration'을 호출 한 후 이전 위치로 돌아가는 단축키 (0) | 2020.11.27 |