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

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

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

synchronized (lock) {   
    doSomething();       
}
63
задан Matthew Murdoch 7 January 2010 в 09:41
поделиться

2 ответа

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

Замок гарантированно закрывается во всех случаях, и исключение не является исключением (каламбур).

.
93
ответ дан 24 November 2019 в 16:17
поделиться

Как и следовало ожидать, блокировка снята нормально.

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

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

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

39
ответ дан 24 November 2019 в 16:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: