Question

Y a-t-il des effets secondaires peu clairs à lancer une exception à l'intérieur une clause synchronisée? Qu'advient-il de la serrure?

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

synchronized (lock) {   
    doSomething();       
}
Était-ce utile?

La solution

Je ne vois pas d'effet secondaire.

verrouillage est garantie à fin dans tous les cas, et une exception ne fait pas exception (jeu de mots).

Autres conseils

Comme vous l'espoir, le verrou est libéré normalement.

Pour référence, la section appropriée du JLS qui garantit ce comportement est § 14,19 :

  

Si l'exécution du bloc se termine normalement, le verrou est déverrouillé et l'état synchronisé se termine normalement. Si l'exécution du bloc se termine brusquement pour une raison quelconque, le verrou est déverrouillé et l'état synchronisé se termine alors brusquement pour la même raison.

( « achèvement brusque » est défini ailleurs dans la JLS d'inclure des exceptions JVM, les exceptions soulevées par throw, et l'utilisation des break, continue ou déclarations de return pour transférer à l'extérieur du bloc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top