reentrantlock的底层原理?
时间: 2023-07-17 21:57:33 浏览: 200
ReentrantLock 实现原理 1
ReentrantLock是Java中用于同步线程的一个类,它的底层原理是基于AQS(AbstractQueuedSynchronizer)实现的。AQS是一个提供了同步器框架的抽象类,ReentrantLock通过继承AQS来实现同步功能。
在ReentrantLock中,主要有两个核心属性:state和exclusiveOwnerThread。state表示锁的状态,用于记录锁的持有数,而exclusiveOwnerThread表示当前持有锁的线程。
在ReentrantLock中,主要有两个核心方法:lock()和unlock()。当一个线程调用lock()方法时,如果锁没有被其他线程持有,该线程会获取到锁并将state加1,并将exclusiveOwnerThread设置为当前线程。如果锁已经被当前线程持有,那么它会增加state的计数器,表示重入次数加1。
在unlock()方法中,会将state减1,并在state为0时释放锁。如果state大于0,表示锁还被其他线程持有,当前线程仍然可以继续持有锁。
另外,ReentrantLock还提供了公平性选择,可以在构造ReentrantLock对象时指定是否为公平锁。公平锁会倾向于将锁授予等待时间最长的线程。
总之,ReentrantLock通过AQS的底层实现来提供可重入的互斥锁,保证线程安全的访问共享资源。
阅读全文