1. 引言
在Java并发编程中,ReentrantLock作为一种可重入的互斥锁,提供了比synchronized更强大和灵活的功能。其中,NonfairSync作为ReentrantLock内部非公平锁的实现,其设计理念和源码实现都体现了对性能和公平性的权衡。
2. NonfairSync概述
- 非公平锁特性:
- 新到达的线程在锁空闲时可能立即获取锁,而不必等待等待队列中的线程。
- 可能导致线程饥饿,但在某些场景下可以提高吞吐量。
- 继承结构:
NonfairSync继承自Sync,Sync又继承自AQS(AbstractQueuedSynchronizer)。Sync作为内部抽象类,定义了锁的获取和释放的通用逻辑。
3. 源码分析
- 关键方法:
lock():尝试获取锁。首先通过CAS操作尝试直接获取锁,如果失败则调用acquire(1)进入AQS的队列等待逻辑。nonfairTryAcquire(int acquires):非公平锁获取锁的核心方法。如果当前锁未被占用(即state为0
