什么是锁的可重入性 ? 为什么说Synchronized是可重入锁 ?

小龙女 小龙女 2019年07月05日 23:23:59 阅读 27

可重入性是锁的一个基本要求,是为了解决自己锁死自己的情况。

比如一个类中的同步方法调用另一个同步方法,假如Synchronized不支持重入,进入method2方法时当前线程获得锁,method2方法里面执行method1时当前线程又要去尝试获取锁,这时如果不支持重入,它就要等释放,把自己阻塞,导致自己锁死自己。

·

对Synchronized来说,可重入性是显而易见的,在执行monitorenter指令时,如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁(而不是已拥有了锁则不能继续获取),就把锁的计数器+1,其实本质上就通过这种方式实现了可重入性。


用户回答