AQS源码解析流程图
2021-04-11 23:18:07 0 举报
AQS源码解析流程图
作者其他创作
大纲/内容
非公平锁
acquire(1)
true
节点加入对列
pred.waitStatus==-1?
ReentrantLock
addWaiter()
入队
返回false
t==null?
false
没有其他线程在排队。调用enq构造队列,并将node加加入队列。
pred != null?
返回true
lock()
enq方法
sync继承了AbstractQueuedSynchronizer
阻塞线程
CAS获取锁
pred.waitStatus>0
初始化傀儡虚拟head节点
sync.lock();
返回true表示获取到锁
false对应2步
设置当前的锁的线程为当前线程
公平锁
acquireQueued
返回Node
尝试在获取锁?
fairSync#Lock()
tryAcquire
addWaiter()
设置pred.waitstate = -1
NonfairSync#Lock()
true对应1步
lock
判断P节点是否为头节点
0 条评论
回复 删除
下一页