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
 
