Побочные эффекты создания исключения внутри синхронизированного предложения?


есть ли какие-либо неясные побочные эффекты для создания исключения из синхронизированного предложения? Что происходит с замком?

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

synchronized (lock) {   
    doSomething();       
}
2 57

2 ответа:

Я не вижу никаких побочных эффектов.

The блокировка гарантированно будет прекращена во всех случаях, и исключение-не исключение (каламбур).

как вы надеетесь, замок отпущен нормально.

для справки, соответствующий раздел JLS, который гарантирует это поведение § 14.19:

если выполнение блока завершается нормально, то блокировка разблокирована и синхронизированный оператор завершается нормально. Если выполнение блока завершается внезапно по какой-либо причине, то блокировка разблокирована и синхронизированный оператор затем завершается резко для того же самого причина.

("резкое завершение" определяется в другом месте в JLS, чтобы включить исключения из JVM, исключения, вызванные throw и break,continue или return операторы для передачи за пределы блока.)