java.util.concurrent.locks包下锁的实现原理之ReentrantLock
一、java concurrent包下lock类图概览 红色连线的表示内部类  1、java并发包下面的锁主要就两个,ReentrantLock(实现Lock接口) 和ReentrantReadWriteLock(实现ReadWriteLock接口)。 2、ReentrantLock类构造函数如下, sync是Sync的实例,NonfairSync(非公平锁)和FairSync(公平锁)是Sync的子类。 public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); } 3、ReentrantReadWriteLock类构造函数如下,共有三个属性,sync、readerLock、writerLock public ReentrantReadWriteLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); readerLock = new ReadLock(this); writerLock = new WriteLock(this); } 我们看到ReentrantLock和ReentrantReadWriteLock都的实现都依赖于sync这个对象。sync是AbstractQueuedSynchronizer的实例。AbstractQueuedSynchronizer就是java并发包下面实现锁和线程同步的基础,AbstractQueuedSynchronizer就是大名鼎鼎的AQS队列,下文我们都用AQS来表示AbstractQueuedSynchronizer。 ##二、ReentrantLock实现原理 1、如何加锁 ReentrantLock使用方式如下 class X { private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock....