什么是可重入锁(ReentrantLock)?
举例来说明锁的可重入性
public class UnReentrant{
Lock lock = new Lock(); public void outer(){ lock.lock();
inner(); lock.unlock();
}
public void inner(){
lock.lock();
//do something lock.unlock();
} }
outer 中调用了 inner,outer 先锁住了 lock,这样 inner 就不能再获取lock。其实调用 outer 的线程已经获取了 lock 锁,但是不能在 inner 中重复利用已经获取的锁资源,这种锁即称之为 不可重入可重入就意味着:线程可以进入任何一个它已经拥有的锁所同步着的代码块。
synchronized、ReentrantLock 都是可重入的锁,可重入锁相对来说简化了并发编程的开发。