一、锁的作用和比较
1、Lock接口及其类图
Lock接口:是Java提供的用来控制多个线程访问共享资源的方式。
ReentrantLock:Lock的实现类,提供了可重入的加锁语义
ReadWriteLock:读写锁的接口
ReentrantReadWriteLock: ReadWriteLock的实现类,维护一对锁,一个读锁(ReentrantReadWriteLock.ReadLock)和一个写锁(ReentrantReadWriteLock.writeLock),实现了锁的分离,提高了性能和吞吐量。也提供了可重入的加锁语义
ReentrantReadWriteLock.ReadLock:
ReentrantReadWriteLock.WriteLock:
Condition:条件队列接口,提供类似于Object监视器方法 ,可与Lock实现等待/通知模式
AbstractQueuedSynchronizer.ConditionObject: Condition的实现类
AbstractQueuedLongSynchronizer.ConditionObject:Condition的实现类
AbstractOwnableSynchronizer:可以被线程专有的同步器
AbstractQueuedSynchronizer(AQS):继承于AbstractOwnableSynchronizer,Java中构建锁和其他同步器的基础构建
AbstractQueuedLongSynchronizer:AbstractQueuedSynchronizer的一个版本,实现对Long型同步状态的同步。
(1)Lock与Synchronized同步锁、内置锁的的区别
加锁机制 |
特性 |
优点 |
缺点 |
适用范围 |