Un peu d'aide s'il vous plaît, considérez le peu de code ci-dessous.Verrouillage réentrant
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
Je lis que lorsque doSomething() dans LoggingWidget est appelée, la machine virtuelle Java tentera d'acquérir un verrou sur LoggingWidget d'abord, puis sur Widget.
Je suis curieux de connaître la raison. Est-ce parce que la JVM sait que doSomething() a un appel à super.doSomething() ou parce que l'appel d'une méthode de sous-classe acquiert toujours aussi un verrou sur la superclasse.
Vive
Vous devriez publier une référence à l'endroit où vous lisez ceci parce que ce n'est pas vrai :-) –
Merci en effet pour votre aide. J'ai mal compris l'explication du verrouillage réentrant.Après avoir lu votre explication, je suis retourné à la source (un extrait du livre Concurrency en pratique) et cela a du sens maintenant. – CaptainHastings