2010-01-07 4 views

Répondre

79

Je ne vois aucun effet secondaire. Dans tous les cas, le verrou est garanti être terminé dans tous les cas, et aucune exception ne fait exception (jeu de mots prévu).

+10

+ 1 pour donner des preuves, que parfois une exception n'est pas une exception :-)) –

+0

@KLE qu'en est-il d'une erreur? Que se passe-t-il si le code renvoie Stackoverflow ou OutOfMemory? – Pacerier

+0

[Cette page] (http://www.jguru.com/faq/view.jsp?EID=245377) vaut également le détour, juste pour info. –

36

Comme vous l'espériez, 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, alors le verrou est déverrouillé et l'instruction synchronisée 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 return états à transférer à l'extérieur du bloc.)

+0

si 'doSomething();' lance un java.lang.StackOverflowError ce qui se passe? – Pacerier

Questions connexes