ReentrantLock可重入锁⭐️通过具体案例分析其工作流程以及实现原理
创作时间:
作者:
@小白创作中心
ReentrantLock可重入锁⭐️通过具体案例分析其工作流程以及实现原理
引用
CSDN
1.
https://blog.csdn.net/TM007_/article/details/134723050
ReentrantLock是Java并发包中非常重要的一个类,它提供了比synchronized更灵活的锁获取方式。本文将通过具体案例分析ReentrantLock的工作流程以及实现原理,帮助读者深入理解这一重要的并发工具。
一、可重入锁的特点
相比于线程安全中使用的synchronized和volatile关键字,ReentrantLock具有以下特点:
- 可中断:持有锁的线程可以响应中断,而synchronized则不行
- 可以设置超时时间:尝试获取锁时可以设置等待时间
- 可以设置公平锁:支持公平锁和非公平锁两种模式
- 支持多个条件变量:可以基于同一个锁定义多个条件
- 与synchronized一样,都支持重入
二、原理
- ReentrantLock主要利用CAS(Compare And Swap)+AQS(AbstractQueuedSynchronizer)队列来实现。它支持公平锁和非公平锁,两者的实现类似。构造方法接受一个可选的公平参数(默认非公平锁),当设置为true时,表示公平锁,否则为非公平锁。公平锁的效率往往没有非公平锁的效率高,在许多线程访问的情况下,公平锁表现出较低的吞吐量。
- 构造方法
2.1 有参数的构造函数,传进去一个true,你就能获得一个公平锁
2.2 无参的构造函数,默认是非公平锁
2.3 构造方法分析
点进去可以发现公平锁和非公平锁都是继承自同一个父类Sync类,父类点进去查看是继承了AQS类,所以可以说可以得出ReentrantLock底层主要实现就是基于AQS来实现的
三、工作流程
可重入锁的内部流程大概就是这样,注意使用完不要忘记释放锁
ReentrantLock reentrantLock = new ReentrantLock();
try{
//获取锁
reentrantLock.lock();
//执行业务逻辑
}finally {
//不要忘了释放锁
reentrantLock.unlock();
}
- 线程来抢锁后使用cas的方式修改reentrantLock对象(锁对象)的state状态,修改状态成功为1,则让锁对象的exclusiveOwnerThread属性指向当前线程,获取锁成功
- 假如修改状态失败,则会进入双向队列中等待,head指向双向队列头部,tail 指向双向队列尾部
- 当exclusiveOwnerThread为null的时候,则会唤醒在双向队列中等待的线程
- 公平锁则体现在按照先后顺序获取锁,非公平体现在不在排队的线程也可以抢锁
四、synchronized,volatile,reentrantLock的区别汇总
特征 | synchronized | volatile | reentrantLock |
---|---|---|---|
语法方面 | synchronized 是关键字,用于实现同步,在 JVM 中由 C++ 实现 | volatile 是关键字,用于标记变量为易变的 | ReentrantLock 是 Lock 接口的实现类,由 JDK 提供,用 Java 语言实现 |
功能方面 | 进入 synchronized 代码块时会自动获取锁,退出时会自动释放锁 | 具有可见性和禁止指令重排序的特性 | 提供了灵活的加锁和解锁方式,支持公平锁、可中断、超时等特性,以及条件变量等高级功能 |
性能方面 | 仅能使用在方法或代码块上,无法实现更复杂的同步需求 | 不能实现同步,只能保证可见性,适合于单个变量的读写操作 | 需要手动调用 lock 和 unlock 方法来获取和释放锁 |
- synchronized是内置的锁机制,适用于方法和代码块级别的同步,具有自动释放锁的特性。
- volatile关键字用于保证变量的可见性和禁止指令重排序。
- ReentrantLock是显式锁,需要手动获取和释放锁,提供了更多高级功能。
热门推荐
犯太岁戴什么饰品好?戴什么能化解?
广西涠洲岛、福建东山岛、浙江花鸟岛游玩攻略及住宿美食推荐
汽车中控台小孔:功能多样的神秘存在
如何为视频NAS选择适当的存储介质
滑雪姿势与技巧全解析
滑雪前运动训练指南:从耐力到灵活性全方位提升
小儿特重度烧伤的用药原则
杨震:四知拒金,清白传家
猫咪营养不良?饮食调整,健康回归!
探寻明仙风道骨之美,一幅幅传世画卷的深邃意境
紫砂壶泡茶全攻略:从基本知识到使用技巧
宠物狗在家很害怕怎么办?(让你的爱犬在家里感到安全舒适的小技巧)
充分挖掘潜质 给孩子最合适的教育
为什么上海要以“单价近15万/㎡”的代价,动迁“东安一、二村”这种老旧小区?
从舞台表演到场景应用,人形机器人的"就业培训"要持续多久?
服装设计与工艺专业主要学什么?这三大核心技能让你成为时尚界的“造物主”!
未知液体成分检测:原理、方法与步骤详解
导致寒湿的原因有哪些?常见因素全解析
泄泻:寒湿内盛证的辨证论治
苹果手机调整字体大小的两种方式
OCR文字识别技术:从原理到应用的全面解析
7种寄生虫,这些常见食物中都有
菜籽油价格大跌的原因是什么?如何分析其市场趋势?
如何进行油漆的正确使用和保管?油漆使用中有哪些注意事项?
盘点顶级耐看的黑科技小说
写景抒情散文的特点与写作技巧
狗狗感冒有什么症状?如何识别狗狗感冒?
霍尔果斯中哈国际旅游区什么季节去玩最好?霍尔果斯中哈国际旅游区适合几月份去?
中草药:传统医学瑰宝的全面解读
AI数字人应用的主要风险及合规要点分析