Los efectos secundarios de lanzar una excepción dentro de una cláusula sincronizada?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Hay efectos secundarios poco claras a lanzar una excepción dentro de una cláusula sincronizada? ¿Qué ocurre con la cerradura?

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

synchronized (lock) {   
    doSomething();       
}
¿Fue útil?

Solución

No veo ningún efecto secundario.

La bloqueo está garantizado para ser terminado en todos los casos, y una excepción no es una excepción (juego de palabras).

Otros consejos

Como era de esperar, el bloqueo se libera normalmente.

Para referencia, la sección correspondiente de la JLS que garantiza este comportamiento es § 14.19 :

  

Si la ejecución del bloque se completa con normalidad, entonces el bloqueo está desbloqueado y el estado sincronizado se completa con normalidad. Si la ejecución del bloque termina bruscamente por cualquier razón, entonces el bloqueo está desbloqueado y el estado sincronizado completa entonces bruscamente por la misma razón.

( 'terminación abrupta' se define en otra parte en el JLS para incluir excepciones de JVM, excepciones planteadas por throw, y el uso de los break, continue, o declaraciones return para transferir fuera del bloque.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top