Effets secondaires de lancer une exception à l'intérieur d'un synchronisé clause?
Sont-il pas clair du côté des effets de la levée d'une exception à l'intérieur d'un synchronisé clause?
Qu'advient-il de la serrure?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
Vous devez vous connecter pour publier un commentaire.
Je ne vois pas d'effets secondaires.
La de verrouillage est assuré d'être résilié dans tous les cas, et qu'une exception n'est pas une exception (pun intended).
Que vous espérez, le verrou est libéré normalement.
Pour référence, la section appropriée de la JLS qui garantit ce comportement est § 14.19:
('brusque achèvement" est défini ailleurs dans le JLS inclure les exceptions de la JVM, les exceptions soulevées par
throw
, et l'utilisation de labreak
,continue
, oureturn
états de transférer à l'extérieur du bloc.)doSomething();
throws java.lang.StackOverflowError ce qui se passe?