首先这个包中有三个接口,且都不继承任何接口
1.AQS相关类
{@link AbstractQueuedSynchronizer}的版本,其中同步状态保持为{@code long}。此类具有与{@codeAbstractQueuedSynchronizer}完全相同的结构,属性和方法,除了所有与状态相关的参数和结果均定义为{@code long}而不是{@code int}。创建诸如以下的同步器时,此类可能很有用需要64位状态的多级锁和屏障。
也就是说这两个子类结构功能完全一样除了字段的属性。
AbstractQueuedSynchronizer里面的逻辑是实现基于jdk的锁,lock的关键。
2.Lock接口
直接实现类只有ReentrantLock(和ReentrantReadWriteLock中的两个静态内部类),其实这里面远远不止的一个Lock接口
but它并不是只与这个包中Lock接口相关联在这个类中有一个抽象静态内部类
继承类AQS类实现同步,也就是说ReentrantLock是通过AQS的原理实现同步?
再往下看
ReentrantLock类中还有两个内部类分别是
NonfairSync和 FairSync 都继承了自己内部之前定义的Sync类,分别用来实现公平锁和非公平锁
3.ReadWriteLock接口
实现类为 ReentrantReadWriteLock,它有这些内部类
注意:其中Sync与重入锁不同的是它还有两个内部类,与多线程threadlocal,反序列化相关。
此外多了两个静态类
ReadLock和WriteLock 均实现了Lock接口
4.Condition接口
主要在AbstractOwnableSynchronizer的两个子类中实现
5.最后说一下两个相对独立的LockSupport和StampedLock
StampedLock:1.8引入的增强的读写锁,为了解决老版本的读写锁可能产生的写饥饿问题,这里读写不互斥,如果在读的过程中进行了写那么就再读一次。
LockSupport:用于创建锁和其他同步类的基本线程阻塞原语。(作者原话的翻译)里面功能类似于 notify,wait但是有一定的优化。