ReentrantLock非公平锁源码解读
程序员文章站
2022-04-10 08:35:49
ReentrantLock中的公平锁以及非公平锁实现是继承AQS.所以在调用构造方法传入的值决定了是否为公平锁。其中的lock方法底层调用AQS的acquire方法。如下tryAcquire方法的实现有公平和非公平实现,可以看到实现类有ReentrantLock非公平锁加锁流程NonfairSync方法如果如果没抢到锁 如果没抢到锁,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg),就执行后续流程acquireQue......
ReentrantLock中的公平锁以及非公平锁实现是继承AQS.所以在调用构造方法传入的值决定了是否为公平锁。其中的lock方法底层调用AQS的acquire方法。如下
tryAcquire方法的实现有公平和非公平实现,可以看到实现类有ReentrantLock
非公平锁加锁流程NonfairSync方法
如果如果没抢到锁 如果没抢到锁,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg),就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg)没抢到锁如果没抢到锁,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg),先执行addWaiter
addWaiter这个就执行完成,会返回一个node对象。在执行aquireQueue方法。该方法为入队方法
shouldParkAfterFailedAcquire方法
该方法确保前驱结点的状态为SIGNAL,然后阻塞当前线程。这样做是因为在前驱节点释放锁后会唤醒后继节点。可以看下释放锁的源码,会用到该状态的判断
,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), 如果没抢到锁,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg)
本文地址:https://blog.csdn.net/weixin_42740540/article/details/109577063
推荐阅读
-
ReentrantLock锁 源码分析
-
ReentrantLock源码详解--条件锁
-
ReentrantLock源码详解--公平锁、非公平锁
-
AbstractQueuedSynchronizer源码分析(ReentrantLock锁的实现)
-
死磕 java同步系列之ReentrantLock源码解析(二)——条件锁
-
死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
-
ReentrantLock非公平锁源码解读
-
ReentrantLock重入锁简介源码以及测试死锁时的问题
-
ReentrantLock锁 源码分析
-
JAVA——以ReentrantLock为例学习重入锁以及公平性问题