监视锁是可重入的:
当一个线程想要获取已被其他线程获取的监视锁时,需等待。
当一个线程想要获取它已经持有的监视锁,这个请求是被允许的。
如果不是重进入锁,以下代码就会产生死锁。
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}