什么是可重入锁(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 都是可重入的锁,可重入锁相对来说简化了并发编程的开发。