Un po 'di aiuto per favore, considera il bit di codice qui sotto.Blocco rientrante
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
Ho letto che quando viene chiamata doSomething() in LoggingWidget, JVM tenterà di acquisire un blocco su LoggingWidget prima e poi su Widget.
Sono curioso di sapere il motivo. È perché la JVM sa che DoSomething() ha una chiamata a super.doSomething() o perché chiamare un metodo di sottoclasse acquisirà sempre un blocco anche sulla superclasse.
Acclamazioni
Dovresti postare un riferimento a dove leggi questo perché non è vero :-) –
Grazie davvero per il tuo aiuto. Ho frainteso la spiegazione del blocco rientrante.Dopo aver letto la tua spiegazione, sono tornato alla fonte (un estratto dal libro Concurrency in pratica) e ha senso ora. – CaptainHastings