Немного о помощи, пожалуйста, рассмотрите бит кода ниже.
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() или потому, что вызов метода подкласса всегда будет получать блокировку над суперклассом.
Приветствия