public class Widget {
public synchronized void doSomething(){
// do something
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
super.doSomething();
}
}
这是《java并发编程实例》一书中的例子,并且书中说:“如果synchronized 不是可重入锁,那么LoggingWidget 的super.dosomething();无法获得Widget对象的锁,因为会死锁。”,这里涉及一个问题,即super不代表父类的实例,如果super是父类实例那么LoggingWidget的dosomething()就涉及两个对象,synchronized即使非重复的,也不会死锁,当然这是结果倒推过程了。对super.dosomething()方法debug就会发现,执行Widget 的dosomething()方法的依然是LoggingWidget的实例,java中调用父类方法之super关键字的疑惑?。