ReetrantLock底层实现是什么?
时间: 2023-12-19 12:06:40 浏览: 66
Java实现生产者消费者模型
ReentrantLock的底层实现是基于AbstractQueuedSynchronizer(AQS)类。AQS是一个用于构建锁和同步器的抽象框架,ReentrantLock通过继承AQS来实现重入锁的功能。
AQS内部通过一个FIFO队列来管理等待获取锁的线程,并使用一个int变量来表示锁的状态。当一个线程请求获取锁时,如果锁是可用的,就将锁的状态设置为1,并将该线程设置为持有锁的线程;如果锁已经被其他线程持有,请求线程就会被加入等待队列中,进入等待状态。
ReentrantLock通过维护一个同步状态变量来实现重入功能。当一个线程重复获取锁时,它会增加同步状态的计数器;当线程释放锁时,计数器递减。只有当计数器为0时,其他线程才能获取到锁。
通过AQS的内部机制,ReentrantLock提供了公平锁和非公平锁两种模式。在公平模式下,AQS会按照线程的请求顺序来分配锁;而在非公平模式下,AQS允许新请求的线程插队获取锁,可能导致已经在等待的线程长时间无法获取到锁。
总而言之,ReentrantLock通过AQS的底层机制实现了重入锁的功能,并提供了公平和非公平两种模式来满足不同的需求。
阅读全文