java并发之重入锁(Reentrancy)--java并发编程实践

        当一个线程请求其他线程已经占有的锁时,请求线程将被阻塞。然而内部锁是可重进入的,因此线程在试图获得它自己占有的锁时,请求会成功。重进入意味着锁的请求是基于”每线程“,而不是基于”每调用“的。重进入的实现是通过为每个锁关联一个请求计数和一个占有它的线程。当计数为0时,认为锁是未被占有的。线程请求一个未被占有的锁时,jvm讲记录锁的占有者,并且讲请求计数器置为1 。如果同一个线程再次请求这个锁,计数将递增;每次占用线程退出同步块,计数器值将递减。直到计数器为0,锁被释放。

        重进入方便了锁行为的封装,因此简化了面向对象并发代码的开发。例如,子类覆写了父类synchronize类型的方法,并调用父类的方法。如果没有可重入锁,这情形很自然就会产生死锁。重入锁帮着我们避免了这种死锁。

你可能感兴趣的:(java并发之重入锁,Reentrancy,java并发编程实践)