这个文章的起因和一个同事的激烈学术性讨论,快打起来那种。

我:ReentrantLock解决多路并发查询的数据合并方式更合适。
棒哥:用synchronized在资源竞争激烈的性能更好。
我:synchronized在资源竞争激烈的时候有极大的概率会进行锁升级,且锁的升级是不可逆的。
棒哥:ReentrantLock内部的乐观锁自旋比线程挂起更消耗cpu的资源。

存在即合理,我觉得单纯的认为某一种方式好或坏是一种片面的看法,这两种方式应该区分场景和并发量和处理时间来判定使用哪一种合适。特别是synchronized已经和我以前认知的不太一样了,JDK6后续的优化,让越来越多的开发者喜欢使用他。

针对我以前认知synchronized做了一波理解

JDK5中,synchronized是性能低效的,因为这是一个重量级操作,对性能的最大影响是阻塞的实现,挂起线程和恢复线程的操作,都需要转入内核态中完成,给并发带来了很大压力。

JDK6中synchronized加入了自适应自旋、锁消除、锁粗化、轻量级锁、偏向锁等一系列优化,官方也支持synchronized,提倡在synchronized能实现需求的前提下,优先考虑synchronized来进行同步。

ReentrantLock是标准的乐观锁的实现,内部while的循环,通过判断标识来判断锁是否被其他线程所持有,当其他线程所持有时,就会一直自旋判断锁是否被释放。

理解内部的原理之后,就很容易理解,如果资源竞争激烈,同时锁竞争激烈,使用乐观锁,就会很多线程中一直在循环等待,当线程数和执行时间到达一个临界值时,可能就会比线程挂起的效率更低,循环等待的开销就会大于线程挂起的开销。所以需要加锁的代码快执行时间普遍很长不建议使用ReentrantLock。
当资源竞争激烈,同时尝试获取锁的线程很多时,部分线程等待过久,如果这个时候使用synchronized,会导致锁慢慢膨胀,资源占有会越来越多。为了保证synchronized的性能,加锁的代码块需要保证,执行时间稳定,不会突然暴增。

synchronized和ReentrantLock性能分析相关推荐

  1. synchronized,ReentrantLock、ReentrantReadWriteLock和StampedLock

    java四种上锁方式原理及适用场景区分 synchronized(monitor).ReentantLock(AQS).AtomicLong(CAS).LongAdder(XADD) 针对代码块需要同 ...

  2. 【Java】synchronized和ReentrantLock分析

    synchronized和ReentrantLock分析 参考: 子路老师博客:https://blog.csdn.net/java_lyvee/article/details/110996764 并 ...

  3. Java—synchronized和ReentrantLock锁详解

    关注微信公众号:CodingTechWork,一起学习进步. 1 synchronized 1.1 synchronized介绍 synchronized机制提供了对每个对象相关的隐式监视器锁,并强制 ...

  4. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  5. java的知识点32——多线程 并发同步的 性能分析、快乐影院  订票操作

    多线程  并发  同步  性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...

  6. java 同步方式 lock_java的两种同步方式, Synchronized与ReentrantLock的区别

    java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...

  7. 可重复锁ReentrantLock原理分析

    可重入锁ReentrantLock实现层面依赖 一.CAS(compareAndSet) LockSupport 基本的方法 park park使得当前线程放弃cpu 进入等待(waiting)状态 ...

  8. reentrantlock原理_分享:synchronized和ReentrantLock的实现原理知识点

    前言 通常呢,会在并发情况下,同时操作某一业务从而造成数据重复提交,业务混乱等问题,通常呢,遇到解决类似问题可采用加锁,限流等问题来解决,那么看看这篇关于java中关于锁中synchronized和R ...

  9. Java性能分析神器-JProfiler详解(一)

    前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...

  10. synchronized和ReentrantLock区别浅析 (转载地址:http://blog.csdn.net/zmx729618/article/details/51594166)

    一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...

最新文章

  1. Android APK的签名--笔记版 V1 签名和V2签名总结
  2. 像“打游戏”一样用Numpy,可视化编程环境Math Inspector了解一下? | 代码开源
  3. 蓦然回首,我是如何走上数据库开发这条路的?(一)
  4. jzoj4230-淬炼神体【0/1分数规划】
  5. 如何用matlab分析代谢,代谢流分析工具-CellNetAnalyzer
  6. 复合索引列顺序对性能的影响
  7. 用nginx-rrd监控nginx访问数
  8. Ubuntu18.04-albert编译安装记录
  9. SQL Server如何备份数据库
  10. 嵌入式学习4--混杂设备驱动
  11. Docker CE 安装教程
  12. Linux C编程实战——第六章 文件操作_项目实现_自写ls命令
  13. [转载][不转不行了^皿^]金庸小说中的十大“公司”
  14. JavaWeb程序填空题
  15. 用极大似然法估计因子载荷矩阵_[转载]第三十六课         因子分析
  16. angular 使用ngx-quill
  17. 艾克姆 蓝牙nRF52832上册-学习笔记
  18. 献给java初学者,非常适合新手练习的Java项目
  19. MongoDB Project(投影字段)
  20. Yocto系列讲解[实战篇]42 - bb文件中的几个关键词require DEPENDS inherit

热门文章

  1. pandorabox安装迅雷远程下载插件
  2. linux内核模块的依赖性、查看、加载与删除
  3. 打造“沉浸式体验”展厅 智能讲解机器人云帆演绎新玩法
  4. 用GZIPOutputStream流压缩出现H4sIAAAAAAAAAA==
  5. 三亚科技创新创业大赛完美落幕,珈和科技等五个企业获一等奖
  6. PS 2019 Mac版 自学入门系列(六)——裁剪和拉直图像
  7. 优化 AIX 6.1 的性能
  8. 完爆面试官!2021Java高频精选面试题讲解
  9. 使用tkinter canvas绘制中国象棋棋盘
  10. poj 1284 Primitive Roots 求素数元根数