public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
今天在看某教材时看到如上代码,说可能会死锁。小弟愚钝,看不出为什么,请高手点拨,多谢!
------解决方案--------------------------------------------------------
我之前说的不太准确,注意现在子类的do方法中是调用了父类的do方法的,假设也在父类的do方法中去new子类的对象调用子类的do方法,结合我上面的举例会死锁吗?
------解决方案--------------------------------------------------------
例子就是一个synchronized 方法调用另一个synchronized 方法,因为是同一个对象,两个方法调用是同一个线程进行,再加上java的锁是可充入的,所以不会死锁。