ReentrantLock
2021-11-04 18:47:00 4 举报
ReentrantLock
作者其他创作
大纲/内容
成功
prev
也可能是重入锁还没完全释放
开始
同步队列结构
失败
否
再尝试直接获取锁
是
判断该节点的前驱节点是不是头节点
尝试解锁
解锁逻辑
重入操作
Thread=t2
AQS同步队列
结束
加锁逻辑
将当前线程封装为一个节点插入到对尾
lock(非公平)
tail
结束,获取到锁
计数器==0
阻塞该线程
thread=t1
Thread=t3
更新该节点的前驱节点状态为-1
next
t1是持有锁的线程
是不是当前线程占有锁
直接去获取锁
首节点的Thread引用是null
prev=null
唤醒head的下一个节点
next=null
Thread=null
head
将该节点设为头节点,并将原头节点出队
t2和t3是在队列中等待的线程
0 条评论
下一页