synchronized和ReentrantLock性能分析
这个文章的起因和一个同事的激烈学术性讨论,快打起来那种。
我:ReentrantLock解决多路并发查询的数据合并方式更合适。
棒哥:用synchronized在资源竞争激烈的性能更好。
我:synchronized在资源竞争激烈的时候有极大的概率会进行锁升级,且锁的升级是不可逆的。
棒哥:ReentrantLock内部的乐观锁自旋比线程挂起更消耗cpu的资源。
存在即合理,我觉得单纯的认为某一种方式好或坏是一种片面的看法,这两种方式应该区分场景和并发量和处理时间来判定使用哪一种合适。特别是synchronized已经和我以前认知的不太一样了,JDK6后续的优化,让越来越多的开发者喜欢使用他。
针对我以前认知synchronized做了一波理解
JDK5中,synchronized是性能低效的,因为这是一个重量级操作,对性能的最大影响是阻塞的实现,挂起线程和恢复线程的操作,都需要转入内核态中完成,给并发带来了很大压力。
JDK6中synchronized加入了自适应自旋、锁消除、锁粗化、轻量级锁、偏向锁等一系列优化,官方也支持synchronized,提倡在synchronized能实现需求的前提下,优先考虑synchronized来进行同步。
ReentrantLock是标准的乐观锁的实现,内部while的循环,通过判断标识来判断锁是否被其他线程所持有,当其他线程所持有时,就会一直自旋判断锁是否被释放。
理解内部的原理之后,就很容易理解,如果资源竞争激烈,同时锁竞争激烈,使用乐观锁,就会很多线程中一直在循环等待,当线程数和执行时间到达一个临界值时,可能就会比线程挂起的效率更低,循环等待的开销就会大于线程挂起的开销。所以需要加锁的代码快执行时间普遍很长不建议使用ReentrantLock。
当资源竞争激烈,同时尝试获取锁的线程很多时,部分线程等待过久,如果这个时候使用synchronized,会导致锁慢慢膨胀,资源占有会越来越多。为了保证synchronized的性能,加锁的代码块需要保证,执行时间稳定,不会突然暴增。
synchronized和ReentrantLock性能分析相关推荐
- synchronized,ReentrantLock、ReentrantReadWriteLock和StampedLock
java四种上锁方式原理及适用场景区分 synchronized(monitor).ReentantLock(AQS).AtomicLong(CAS).LongAdder(XADD) 针对代码块需要同 ...
- 【Java】synchronized和ReentrantLock分析
synchronized和ReentrantLock分析 参考: 子路老师博客:https://blog.csdn.net/java_lyvee/article/details/110996764 并 ...
- Java—synchronized和ReentrantLock锁详解
关注微信公众号:CodingTechWork,一起学习进步. 1 synchronized 1.1 synchronized介绍 synchronized机制提供了对每个对象相关的隐式监视器锁,并强制 ...
- java dump分析工具_java性能分析与常用工具
本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...
- java的知识点32——多线程 并发同步的 性能分析、快乐影院 订票操作
多线程 并发 同步 性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...
- java 同步方式 lock_java的两种同步方式, Synchronized与ReentrantLock的区别
java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...
- 可重复锁ReentrantLock原理分析
可重入锁ReentrantLock实现层面依赖 一.CAS(compareAndSet) LockSupport 基本的方法 park park使得当前线程放弃cpu 进入等待(waiting)状态 ...
- reentrantlock原理_分享:synchronized和ReentrantLock的实现原理知识点
前言 通常呢,会在并发情况下,同时操作某一业务从而造成数据重复提交,业务混乱等问题,通常呢,遇到解决类似问题可采用加锁,限流等问题来解决,那么看看这篇关于java中关于锁中synchronized和R ...
- Java性能分析神器-JProfiler详解(一)
前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...
- synchronized和ReentrantLock区别浅析 (转载地址:http://blog.csdn.net/zmx729618/article/details/51594166)
一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...
最新文章
- Meta祭出元宇宙「阿拉丁神灯」!LeCun称世界模型将带来像人一样的AI
- 【JOURNAL】《不思八九》 --和友腊八诗一首
- linux cat命令源码,每天一个linux命令:cat 命令
- InnoDB Monitors
- CentOS7Selinux设置
- 远程访问rest方式
- SAP UI5 应用开发教程之六十五 - 基于 OData V4 的 SAP UI5 表格控件如何实现创建,编辑和保存功能
- android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
- 计算机入门建模观后感,实习生revit学习心得-初学Revit有感
- mysql自增字段重排 或 归零
- 斯皮尔曼相关系数范围_什么是斯皮尔曼相关系数
- 【逆向JS】调用网易云音乐搜歌功能并爬取评论Python/Java
- 电脑各种故障排除集锦
- Rockchip瑞芯微UART调试指南
- 做市商交易策略-期货
- 纯粹由数字电子器件构成的简易抢答器
- 移除bable打包的use strict模式(vue2)
- win10 Edge浏览器 触控板 快捷键
- windows创建计划任务
- jquery按钮和回车键绑定