请帮个忙,考虑下面的代码段:
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()的调用吗?还是说调用子类方法总会在超类上获取锁呢?
谢谢