一、概述
Lock 有三个实现类,一个是 ReentrantLock, 另两个是 ReentrantReadWriteLock 类中的两个静态内部类 ReadLock 和 WriteLock。
LOCK 的实现类其实都是构建在 AbstractQueuedSynchronizer 上,为何图中没有用 UML 线表示呢,这是每个 Lock 实现类都持有自己内部类 Sync 的实例,而这个 Sync 就是继承 AbstractQueuedSynchronizer (AQS)。为何要实现不同的 Sync 呢?这和每种 Lock 用途相关。另外还有 AQS 的 State 机制。
FairSync 与 NonfairSync 的区别在于,是不是保证获取锁的公平性,因为默认是 NonfairSync(非公平性)
二、AQS
可以看到Lock锁的底层实现是AQS
1.定义
AQS(AbstractQuenedSynchronizer ),抽象的队列式同步器,除了 java 自带的 synchronized