在Synchronized和ReentrantLock之间选择

简介: 在Synchronized和ReentrantLock之间选择

ReentrantLock 在加锁和内存上提供的语义与内置锁相同, 此外它还提供了一些其他功能,包括定时的锁等待、可中断的锁等待、公平性, 以及实现非块结构的加锁。ReentrantLock 在性能上优于内置锁, 其中在Java 6 上略有胜出,而在Java 5.0 中则是远远胜出。 哪为啥不放弃synchronized,并在所有的新并发代码中都使用ReentrantLock ?  已经有些作者建议这么做, 将“synchronized” 作为一种“遗留”结构,但这会将好事情变坏。


与显示锁相比,内置锁仍然具有很大的优势。内置锁为许多开发人员所熟悉,并且简洁紧凑,而且在许多现有的程序都已经使用了内置锁 - 如果将这两种机制混合使用,那么不仅容易令人困惑,也容易发生错误。ReentrantLock 的危险性比同步机制要高, 如果忘记在finally 上 调用unlock,那么虽然程序能正常运行,但实际已经埋下了一个定时炸弹,并很有可能伤及其他代码。 仅当内置锁不能满足需求时,才可以考虑使用ReentrantLock。

 在一些内置锁无法满足需求的情况下,ReentrantLock 可以作为一种高级工具,
 当需要一些高级功能时才应该使用ReentrantLock,这些功能包括:可定时的、可
轮训的与可中断的锁获取操作,公平队列,以及非块结构的锁。否则,还是应该
优先使用Synchronized

在Java5.0 中,内置锁对于ReentrantLock 相比还有一个优点,在线程转储中能够给出在哪些调用帧中获得了哪些锁,并能够检测和识别发生死锁的线程。JVM并不知道哪些线程持有ReentrantLock,因此在调试调用的时候,将起不到帮助作用。Java 6 解决了这个问题,它提供了一个管理和调试的接口,锁可以通过该接口进行注册,从而与ReentrantLocks 相关的加锁信息就能出现在线程转储中,并通过其他的管理接口和调试接口来访问。与Synchronized相比,这些调试消息是一个重要的优势,即便他们大部分都是临时性消息,线程转储中的加锁能给很多程序员带来帮助。ReentrantLock 的非块结构特性仍然意味着,获取锁的操作不能与特定的栈帧关联起来,而内置锁可以


未来更有可能提升的是Synchronized性能,而不是ReentrantLock的性能。因为Synchronized是JVM的内置属性,他能执行一些优化,例如对线程封闭的锁对象的 锁消除优化 , 通过增加锁的粒度来消除内置锁的同步, 而如果通过基于类库的锁来实现这些功能,则可能性不大。除非将来需要在Java 5.0 上部署应用程序, 并且该平台上确实需要ReentrantLock包含的可伸缩性,否则就性能方面来说,应该选择Synchroinzed而不是ReentrantLock。


小结

     与内置锁相比,显式的Lock 提供了一些扩展功能,在处理锁的不可用性方面有着更高的灵活性,并且对队列行有着更好的控制。但ReentrantLock不能完全替代Synchronized,只有在synchronized无法满足的时候,才使用他。

目录
相关文章
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
3天前
|
云安全 监控 安全
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1039 5
|
10天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
700 41
|
14天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1136 41
|
14天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
860 69
大厂CIO独家分享:AI如何重塑开发者未来十年
|
10天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
521 31
|
17天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
970 59
Meta SAM3开源:让图像分割,听懂你的话
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
具身智能核心突破:物理模拟器与世界模型协同技术拆解
本文系统综述了物理模拟器与世界模型在具身智能发展中的协同作用,提出五级智能机器人分类体系(IR-L0至IR-L4),分析其在运动、操作与交互中的进展,并对比主流仿真平台与世界模型架构,探讨其在自动驾驶与关节机器人中的应用及未来挑战。
163 113