问题描述: 1、并发编程--> 重要知识点-->从ReentrantLock的实现看AQS的原理及应用中有一副以非公平锁方式加锁的图解 2、其中如下部分的流程图是否与源码有出入呢? <img width="814" alt="image" src="https://user-images.githubusercontent.com/38376350/176354100-5231d0c5-85d3-4452-9fd7-d8fec36ca779.png"> 3、源码jdk1.8如下 ```java final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread();//获取当前线程 int c = getState(); if (c == 0) { if (compareAndSetState(0, acquires)) {//CAS抢锁 setExclusiveOwnerThread(current);//设置当前线程为独占线程 return true;//抢锁成功 } } else if (current == getExclusiveOwnerThread()) { int nextc = c + acquires; if (nextc < 0) // overflow throw new Error("Maximum lock count exceeded"); setState(nextc); return true; } return false; } ```
Activity
Snailclimb commentedon Jun 30, 2022
是的,这应该是图中的一处笔误。2.2流程图中,(AQS)CAS修改共享资源 state 成功之后应该是获取锁成功(非公平锁)。