Немного помощи, пожалуйста, рассмотрите фрагмент кода ниже.
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
Я прочитал, что при вызове doSomething () в LoggingWidget JVM сначала попытается получить блокировку для LoggingWidget, а затем для Widget.
Мне любопытно узнать причину. Это потому, что JVM знает, что doSomething () имеет вызов super.doSomething (), или потому, что вызов метода подкласса также всегда будет блокировать суперкласс.
Приветствия