请提供一些帮助,请考虑下面的代码。
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
我读到当 LoggingWidget 中的 doSomething() 被调用时,JVM 会先尝试获取 LoggingWidget 上的锁,然后再获取 Widget 上的锁。
我很想知道原因。是因为 JVM 知道 doSomething() 调用了 super.doSomething() 还是因为调用子类方法也总是会获取超类上的锁。
干杯