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

StackOverflow https://stackoverflow.com/questions/2019339

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

synchronized (lock) {   
    doSomething();       
}
Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top