少し助けてください、以下のコードを少し考えてみてください。
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のロックを取得しようとすることを読みました。
その理由を知りたいです。これは、doSomething()がsuper.doSomething()を呼び出すことをJVMが認識しているためか、サブクラスメソッドを呼び出すと常にスーパークラスのロックも取得されるためです。
乾杯