ReentrantLock加锁流程图
2022-05-21 19:06:34 2 举报
ReentrantLock加锁流程图
作者其他创作
大纲/内容
自旋一次尝试获取锁
tryAcquire(arg)
是
compareAndSetStatecas修改锁的状态
维护队列后加锁成功
hasQueuedPredecessors() 判断自己是否需要排队
入队成功后,判断现在node的上一个节点是否是头部节点
判断队列是否为空
park
修改上一个队列的waitstate的值为-1
修改上一个节点的waitstate为-1
创建一个新的node节点线程为当前线程插入到队列的尾部节点中
否
Thread1
Process
入队
创建一个线程为空的node节点设置为队列的头节点再创建一个线程为当前线程的节点 设置为尾部节点
失败
获取锁再次失败
成功
加锁成功
收藏
0 条评论
下一页