ReentrantReadWriteLock原理分析图(写锁加锁)
2020-04-01 23:38:56 0 举报
ReentrantReadWriteLock原理分析图(写锁加锁)
作者其他创作
大纲/内容
acquireQueued
waitStatus=-1(SIGNAL)线程挂起,等待唤醒
更新成功/失败
ReentrantReadWriteLock.Sync
end
N
Y:线程获得了锁,继续执行
compareAndSetState
Thread
AbstractQueuedSynchronizer
当前线程的pre节点是否为head
lock
start
Y:再次尝试获取锁
waiting
加锁
waitStatus0(CANCLE)将pre节点从同步队列中断开,选取下一个pre再次循环
获取锁成功/失败
acquire
获取锁的计数状态state
Y
tryAcquire
N:说明是当前线程已经获得了写锁,现在又重入了state+1,线程继续执行
shouldParkAfterFailedAcquire
Y:将当前节点Node更新为head,结束加锁
addWaiter
N:线程需要排队,判断一下线程排队时是否需要挂起
N:不是head说明需要排队
写锁state等于0或当前线程未获得锁
既不等于-1又不大于0,就把pre的waitStatus改成0,选取下一个pre再次循环
判断线程的等待状态
waitStatus
WriteLock
state=0
0 条评论
下一页