ReentrantLock非公平锁
2021-07-22 17:58:53 7 举报
ReentrantLock非公平锁
作者其他创作
大纲/内容
NodeA
setExclusiveOwnerThread
非当前线程 return false
state
加锁失败
head = tail = null
exclusiveOwnerThread
NodeB
head
重入,state + 1
非公平锁加锁流程
tail
非公平锁解锁流程 同公平锁,此处省略
Node双向链表
lock()
CANCELLED=1
正数,表示取消状态
SIGNAL=-1
后继线程需要解锁
CONDITION=-2
线程正在等待条件
PROPAGATE=-3
指示下一个acquireShared应该无条件传播
初始状态
成功
return true
null
AQS = Node + state
非公平之处在于:所有线程抢占式CAS更新state
prev
next
thread
nextWaiter
waitStatus
自旋时,p == head && tryAcquire(arg)是否可以理解为:非公平锁降级为公平锁???
tryAcquire流程
!= 0
CAS state = 1
= 0
当前线程
自旋流程同公平锁(注意tryAcquire流程)
加锁成功
Node数据结构
失败
收藏
收藏
0 条评论
下一页