JUC-AQS原理
2020-10-10 10:28:54 0 举报
JAVA-CAS原理
作者其他创作
大纲/内容
state++
CAS state+1
设置锁独占线程为当前线程
不是
try acquir Process
F
死循环
有 return false
非公平枪锁
获得前节点
设置当前线程独占
FireSYNC tryAcquire
CAS stat++
cnt==0
非头
fail
acquire 1
是不是第一个NODE
acquire1 成功,说明CAS 0-1成功,head已经释放锁
returen
LockSupport.park(this);
add waiter
return true
while 循环找到前门 <=0 的节点,找到非CANCELED节点,中间的CANCELED节点全丢弃
return true
头
独占线程是当前线程
CANCELLED 1
只有pre是SIGNAL状态才能获取锁
获取当前锁个数 state
是否有后继决定是公平和非公平,公平的情况下必须没有后继才能拿到。非公平抢锁就不需要检查有没有后继
是否有后继
没有
true
!=0
CAS 成为tail节点
success return true
nonfairTryAcquire Process
CONDITIONPROPAGATE < 0
acquire NODE
CAS 该节点为SIGNAL ???
success
判断pre节点watistatus
死循环-成为tail
SIGNAL( -1 )
将自己设置为head
head?
是
0 条评论
回复 删除
下一页