Ein bisschen Hilfe bitte, bedenken Sie den Code unten.Wiedereintrittssperre
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
ich gelesen, dass wenn doSomething() in LoggingWidget aufgerufen wird, wird die JVM versuchen, eine Sperre auf LoggingWidget und dann auf Widget zu erwerben.
Ich bin neugierig, den Grund zu wissen. Liegt es daran, dass die JVM weiß, dass doSomething() einen Aufruf an super.doSomething() hat oder weil das Aufrufen einer Unterklassenmethode immer auch eine Sperre für die Oberklasse erhält.
Prost
Sie sollten einen Verweis auf, wo Sie dies lesen, weil es nicht wahr ist :-) –
Danke in der Tat für Ihre Hilfe. Ich habe die Erklärung der Wiedereintrittssperre falsch verstanden.Nachdem ich Ihre Erklärung gelesen hatte, ging ich zurück zur Quelle (ein Auszug aus dem Buch Concurrency in der Praxis) und es macht jetzt Sinn. – CaptainHastings