java中synchronized同步块是可以重入的。这就意味着如果一个java线程得到一个对象的锁之后,那个这个线程可以进入同一个对象同步的另一个java代码块。
情景一:
public class Reentrant{
public synchronized outer(){
inner();
}
public synchronized inner(){
//do something
}
}
outer()和inner()都被
synchronized关键字修饰,这和synchronized(this)等效。一个线程调用outer()方法之后再调用inner()方法完全没有问题,因为这两个方法都是由相同的管程对象(this)同步,这就是重入。
情景二
最终结果也是正常