AQS
2021-04-05 14:39:09 0 举报
AQS流程图
作者其他创作
大纲/内容
LockSupport.park在这里被阻塞,到此才真正入队了在这里阻塞,unpark唤醒后继续在此方法中跑
acquireQueued
false
true
compareAndSetTail插入队尾结束
tryAcquire抢占
自旋
parkAndCheckInterrupt
tail是否为空
公平锁
NonfairSync.lock()
tryAcquire
非公平锁
compareAndSetHead(new Node())创建傀儡、哨兵节点
setHead(node); p.next = null;
线程节点是否是等待队列头节点
setExclusiveOwnerThread(Thread.currentThread())
addWaiter
线程
封装线程到Node
插入队尾compareAndSetTail
acquire()
将哨兵节点变为垃圾,该节点成为新的哨兵节点
enq
shouldParkAfterFailedAcquire
CAS判断是否有线程持有锁了
抢占线程成功、锁重入
0 条评论
下一页