【多线程】:Synchronized和ReentrantLock的对比

相同点:

  两者都是可重入锁,同一个线程每进入一次,锁的计数器都自增1,等到锁的计数器下降为0时才能释放锁。

 

底层实现对比:

  Synchronized是依赖于JVM实现的,而ReentrantLock是JDK实现的。

 

性能对比:

  Synchronized优化以前,性能比ReenTrantLock差很多,但是自从Synchronized引入了偏向锁,轻量级锁(自旋锁)后,两者的性能就差不多了。

  在两种方法都可用的情况下,官方甚至建议使用synchronized。

  Synchronized的优化借鉴了ReentrantLock中的CAS技术。都是试图在用户态就把加锁问题解决,避免进入内核态的线程阻塞。

 

使用便利性对比:

  Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放;

  而ReentrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。

 

ReenTrantLock独有的能力:

  1. ReentrantLock可以指定是公平锁还是非公平锁。而Synchronized只能是非公平锁。PS:公平锁就是先等待的线程先获得锁。

  2. ReentrantLock提供了一个Condition类,用来实现分组唤醒需要唤醒的线程们,而Synchronized只能随机唤醒一个线程,或者唤醒全部线程。

  3. ReentrantLock提供了一种能够中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制。

总结:

  ReentrantLock比Synchronized锁控制粒度更细,更底层,更灵活,但使用不当或不熟悉出错可能性更高些。所以个人觉得如果涉及上述3种特殊诉求,使用ReentrantLock,否则直接使用Synchronized更方便快捷,且不容易出错。

 

转载于:https://www.cnblogs.com/wwcom123/p/10023168.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《GTA 5》走进现实!AI逼真还原游戏街景,还能“脑补”细节 | 英特尔出品

来源:AI科技评论作者:琰琰编辑:刘冰一在不少玩家眼中,GTA 5(GTA V)称得上是一款旷世神作!GTA 也叫“侠盗猎车手”,是R星旗下一款超高人气动作冒险类游戏,目前已经发售至第…

对公平席位分配问题的探讨:最大余数法、Q值法和D’Hondt方法及其特例|公平分配原则等

公平席位分配问题 本文研究公平的席位分配问题。对席位分配问题中经典的最大余数法、Q值法和D’Hondt方法进行研究和比较,在提出公平性判断原则的基础上,分析其优缺点。本文使用Matlab搭建三种席位分配模型,并对结果展开讨论。给出最大余数法…

电动车产业深度报告:对比苹果,剖析特斯拉产业链投资机会 | 附完整报告下载...

报告出品方:兴业证券作者:戴畅 董晓彬 赵季新本篇报告对苹果产业链和特斯拉产业链进行了深度对比分析,前者引领消费电子黄金十年,后者将开启相关产业链赤金十年。1智能手机 vs 电动汽车:电动车方兴未艾,市场…

七牛云注册创建oss并配置自定义域名

1.登陆官网注册账号 有个人和企业两种,根据自己的情况进行注册 https://portal.qiniu.com/signup/choice 2.注册后要进行认证,不认证是没有免费空间给你使用的 3.创建对象存储,这个当然是选择离自己距离近的咯,更快的响应嘛 4.创建成功后,如果不想绑定到自己的域名的话,七牛云也…

状态转移法求解夫妻过河问题

状态转移法求解夫妻过河问题 摘 要 本文研究夫妻问题。主要运用“状态转移法”解决夫妻过河问题,并用Python编程实现,输出求解过程和结果。分析夫妻对数n和船载人数m和是否有解的关系,给出了该问题的一般提法和解法。 目 录 3.1 约束条件 1…

C++ 空字符('\0')和空格符(' ')

1.从字符串的长度:——>空字符的长度为0,空格符的长度为1。 2.虽然输出到屏幕是一样的,但是本质的ascii code 是不一样的&#xff0c;他们还是有区别的。 #include<iostream> using namespace std;int main(){char a[] " "; char b[] "\0"; …

第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 [计算机组成原理笔记]

第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 本笔记参考书目&#xff1a; 计算机组成原理&#xff08;第六版.立体化教材&#xff09;白中英、戴志涛2021王道计算机组成原理视频公开课 本节重点&#xff1a; 循环冗余校验码/CRC码 的生成和检错 转载请注明文章来源…

利用基于GPU的AI模拟一个现实宇宙 仅需36分钟

来源&#xff1a;The Next Web编译&#xff1a;科技行者科学家已经习惯于使用超级计算机处理宇宙学领域的海量数据&#xff0c;最近卡耐基梅隆大学的研究团队找到一种新方法&#xff0c;可以使用常规的机器学习技术(与AI绘画或作曲拥有同样的底层设计)&#xff0c;在图形处理单…

第七章:集成学习(利用AdaBoost元算法...)

---恢复内容开始--- 集成学习其实不能算一个算法&#xff0c;应该算是一种框架&#xff0c;集百家之长。集成算法具体有Bagging与Boosting两种大类。两者区别&#xff1a; 1)Bagging是并行的&#xff0c;它就好比找男朋友&#xff0c;美女选择择偶对象的时候&#xff0c;会问几…

GPT-3难以复现,为什么说PyTorch走上了一条“大弯路”?

来源&#xff1a;OneFlow 投稿责编&#xff1a;欧阳姝黎2020 年&#xff0c;最轰动的 AI 新闻莫过于 OpenAI 发布的 GPT-3 了。它的1750亿参数量及其在众多NLP任务上超过人类的出众表现让人们开始坚信&#xff1a;大模型才是未来。但与之带来的问题是&#xff0c;训练超大模型所…

CF954I Yet Another String Matching Problem 并查集、FFT

传送门 题意&#xff1a;给出两个由小写$a$到$f$组成的字符串$S$和$T$($|S| \geq |T|$)&#xff0c;给出变换$c1\,c2$表示将两个字符串中所有$c1$字符变为$c2$&#xff0c;求$S$的每一个长度为$T$的子串与$T$做变换使得两个字符串相等的最小变换次数。$1 \leq |T| \leq |S| \le…

生小兔问题

生小兔问题&#x1f430; 本文研究生小兔问题。使用代数模型&#xff0c;在考虑生育情况变化的情况下&#xff0c;求解兔子/白鼠的数目变化。 第1章 问题重述 生小兔问题 兔子出生后能够存活12个月&#xff0c;从第7月开始生小兔&#xff0c;7、8两月每对兔子生1对小兔/月&am…

光刻机龙头ASML回应韩国建厂:无需过度解读

来源&#xff1a; 深城物联近期&#xff0c;韩国在半导体领域的动作不小。先是韩国总统文在寅公开宣布韩国将斥资4500亿美元建设全球最大芯片制造基地&#xff0c;之后韩国又向全球光刻机龙头大厂阿斯麦&#xff08;ASML&#xff09;抛出了橄榄枝&#xff0c;请ASML在韩国建立再…

Spring入门之一-------实现一个简单的IoC

一、场景模拟 public interface Human {public void goHome();} Human&#xff1a;人类&#xff0c;下班了该回家啦public interface Car {void start();void stop();void turnLeft();void turnRight();} Car&#xff1a;汽车&#xff0c;可以启动、停止、左转、右转public cla…

常染色体的隐性疾病数学建模(代数模型)

常染色体的隐性疾病数学建模&#xff08;代数模型&#xff09; 摘要&#xff1a;本文研究随交配代数的增长&#xff0c;常染色体隐性疾病的基因分布变化问题。使用代数模型&#xff0c;在正常人不与显性患者交配&#xff0c;但隐性患者可与正常人、隐性患者交配的情况下时&…

一文拆解中国火星车着陆全过程

天问一号着陆器降落火星&#xff08;艺术图&#xff09;来源&#xff1a; 深城物联 经过惊心动魄的九分钟&#xff0c;中国首个火星车祝融号成功穿越火星大气层&#xff0c;着陆于火星北半球的乌托邦平原南端。自此&#xff0c;继苏联和美国之后&#xff0c;中国成为了第三个成…

VS Code 关于SFTP上传文件到多服务器的配置

工欲善其事&#xff0c;必先利其器&#xff01; 刚学前端的时候一直用的DW来编写代码&#xff0c;其功能非常强大&#xff0c;但在Linux下不能用&#xff0c;所以就转VS Code了。 但是刚开始使用VS Code的时候&#xff0c;很多DW上的功能需要自己安装扩展&#xff0c;并配置才可…

第二章 物理层 4 奈氏准则和香农定理 [计算机网络笔记]

第二章 物理层 4 奈氏准则和香农定理 本笔记参考书目&#xff1a; 计算机网络&#xff08;第8版&#xff09;谢希仁2021王道计算机网络视频公开课 本节重点&#xff1a; 奈氏准则和香农定理的计算/适用范围 转载请注明文章来源&#xff01; 失真 失真的影响因素&#xff1…

谈谈数学之现在与未来

文章来源&#xff1a;好玩的数学来源&#xff1a;《数学教学通讯》2005年3月&#xff08;上半月&#xff09;&#xff08;总第220期&#xff09;作者&#xff1a;王元&#xff08;中国科学院数学与系统科学研究院&#xff09;数学科学是什么&#xff1f;我们首先谈谈数学科学是…

SQL Server创建Job, 实现执行相同脚本而产生不同作业计划的探究

1 . 背景描述 本公司的SQL Server 服务器近百台&#xff0c;为了收集服务器运行的状态&#xff0c;需要在各个实例上部署监控Job&#xff0c;将收集到的信息推送到中央管理服务器。 收集的信息主要包括&#xff1a;慢查询、阻塞、资源等待、Connection_Trace log 、Job执行状态…