- java.util.concurrent.ReentrantLock类,主要利用CAS+AQS(AbstractQueueSynchronizer)队列来实现,实现了Lock锁;
-
基本实现过程:先通过CAS尝试获取锁,如果此时已经有线程占据了锁,那就加入AQS队列并且挂起。当锁被释放之后,排在列队首的线程会被唤醒,然后CAS再次尝试获取锁。
- ReentrantLock中包含内部类有:
1)继承了AbstractQueueSynchronizer类的Sync;
2)NonfairSync非公平锁类和FairSync公平锁类;
- 非公平锁
1)加锁:ReentrantLock nonfairSyncLock = new ReentrantLock([false]); 执行过程源码解析:
2)释放锁:nonfairSyncLock.lock();
- 公平锁:
加锁:ReentrantLock fairSyncLock = new ReentrantLock(true); 执行过程源码解析:(与非公平锁唯一不同点是,尝试获取锁的时候,公平锁使线程按照请求锁的顺序依次获得锁。)
释放锁:fairSyncLock.lock();同非同步锁执行逻辑。