Skip to content

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

@xiaopujun

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;
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions