Skip to content

从ReentrantLock的实现看AQS的原理及应用中有一副以非公平锁方式加锁的图解误差? #1761

Description

@xiaopujun

问题描述:
1、并发编程--> 重要知识点-->从ReentrantLock的实现看AQS的原理及应用中有一副以非公平锁方式加锁的图解
2、其中如下部分的流程图是否与源码有出入呢?
image
3、源码jdk1.8如下

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions