AQS同步器对象变化和加锁和解锁过程图示
2023-03-03 14:36:58 0 举报
同步器对象变化和加锁和解锁过程图示
作者其他创作
大纲/内容
head=nulltail=nullstate=0exclusiveOwnerThread=null
Thread-1线程获得锁
head=new Node()---不为空tail=head---不为空state=1exclusiveOwnerThread=Thread-0
waitStatus=-1prev=nullnext=nullthread=Thead-1nextWaiter=null
prev
head=nulltail=nullstate=1exclusiveOwnerThread=Thread-0
waitStatus=0prev=nullnext=nullthread=Thead-1nextWaiter=null
next
Thread-0
this
tail
headtailstate=1exclusiveOwnerThread=Thread0
head
初始
headtailstateexclusiveOwnerThread
cas
this对象属性的变化过程
waitStatus=0prev=nullnext=nullthread=Thead-2nextWaiter=null
Thread-0释放锁
CAS
Thread-1
Thread-2
自旋
head=new Node()---属性都为空tail=new Node()---属性都为空state=1exclusiveOwnerThread=Thread-0
首尾节点变成双向链表
lock.lock()指的是ReentantLock$NonfairSync对象
唤醒
Node节点--当前
首尾都不为null了
0 条评论
下一页