当前位置:网站首页>ReentrantLock原理(未完待续)
ReentrantLock原理(未完待续)
2022-07-31 19:21:00 【斯沃福德】
1. 概述
ReentrantLock底层基于AQS,其构造方法返回的就是NonfaireSync和faireSync;
两种同步器都继承自Sync,Sync又继承自AQS!
new ReentrantLock时,返回的就是同步器,默认是非公平的;
2. 非公平锁的加锁
2. 1 加锁成功
调用lock() 方法,使用CAS机制尝试将AQS底层 volatile修饰的 state 属性改为1,若成功即加锁;
若失败即出现竞争,则进入acquire() 方法;
2. 2 加锁失败
- 当锁已经被占用,共享内存中的 state属性是1,compareAndSet(0,1) 会失败,CAS更改state属性失败,会进入 acquire() 方法;
- 进入else中 AQS的 acquire() 方法;
- 调用 tryAcquire() 再次尝试,结果为false,取反就是true,再执行acquireQueued() ,会创造一个Node节点对象关联线程,放到FIFO等待队列(双向链表)中;
- 节点进入队列后,会循环尝试加锁,失败后会被park阻塞,节点的waitStatus 会被置为 -1,后续会由前序节点来唤醒这个节点;
AQS中的acquire()方法:
假设多个线程多竞争失败,进入了FIFO等待队列:
2. 非公平锁的释放
2.1 竞争成功
- 调用 unlock() 方法,底层调用了release() 方法,使用tryRelease() 将state置为0即释放锁;
- tryRelease() 返回true后,判断head哨兵节点是否为null ,如果否且哨兵节点的waitStatus 也不会0(为-1),则哨兵节点的后继节点被unParkSuccessor 唤醒 !然后这个后继节点会从FIFO队列中移除;
2.1 竞争失败
边栏推荐
- Linux环境redis集群搭建「建议收藏」
- 【PIMF】OpenHarmony 啃论文俱乐部—盘点开源鸿蒙三方库【3】
- UserAgent 解析
- Kotlin coroutines: continuation, continuation interceptor, scheduler
- matplotlib ax bar color 设置ax bar的颜色、 透明度、label legend
- flowable工作流所有业务概念
- STM32 full series development firmware installation guide under Arduino framework
- Routing interception of WeChat applet
- leetcode 665. Non-decreasing Array
- Basics of ResNet: Principles of Residual Blocks
猜你喜欢
Three.js入门
【NLP】什么是模型的记忆力!
ECCV 2022 华科&ETH提出首个用于伪装实例分割的一阶段Transformer的框架OSFormer!代码已开源!...
[PIMF] OpenHarmony Thesis Club - Inventory of the open source Hongmeng tripartite library [3]
iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具
ResNet的基础:残差块的原理
useragent在线查找
TestCafe总结
GateWay实现负载均衡
Basics of ResNet: Principles of Residual Blocks
随机推荐
The new telecom "routine", my dad was tricked!
性能优化:记一次树的搜索接口优化思路
Made with Flutter and Firebase!counter application
35道MySQL面试必问题图解,这样也太好理解了吧
pytorch lstm时间序列预测问题踩坑「建议收藏」
rj45 to the connector Gigabit (Fast Ethernet interface definition)
架构实战营模块八作业
MySQL---聚合函数
使用 Flutter 和 Firebase 制作!计数器应用程序
华为手机一键开启“维修模式”隐藏所有数据,让手机隐私更加安全
【AcWing】第 62 场周赛 【2022.07.30】
Getting Started with Tkinter
Kotlin协程:续体、续体拦截器、调度器
ECCV 2022 华科&ETH提出首个用于伪装实例分割的一阶段Transformer的框架OSFormer!代码已开源!...
Cache and Database Consistency Solutions
iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具
Three. Introduction to js
ojdbc8 "Recommended Collection"浅谈网络安全之算法安全
matplotlib ax bar color Set the color, transparency, label legend of the ax bar