日期:2014-05-20  浏览次数:20787 次

关于java内置锁的小问题,请高手指点
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的锁是可充入的,所以不会死锁。