Synchronized机制下偏向锁、轻量级锁、重量级锁的适用场景
上次总结了Synchronized机制下的锁的种类和原理,这次总结一下几种锁的适用场景。
偏向锁
一个线程获取某个对象的偏向锁的成本是很低的,只需把对象头的偏向线程id改为自己就好,如果偏向线程id已经为自己则直接获得锁。当偏向锁的获取出现竞争,则偏向锁可能会升级为轻量级锁。
根据这些,可以看出偏向锁适合无竞争、竞争小的场景,理想的情况为总是由同一个线程去访问同步块、获取某个对象的锁。实际应用中,很多时候情景也确实是这样的。
轻量级锁
轻量级锁由偏向锁升级而来,特点是获取轻量级锁的是通过CAS原子操作进行的,失败的线程不会进入阻塞,而是自旋尝试再次CAS去获取锁。若失败的次数过多,则轻量级锁会膨胀为重量级锁。因为自旋也是要消耗cpu的,不能让线程一直自旋下去。
根据这些,可以看出 轻量级锁最适合场景是追求响应时间的情景,理想的情况是少量线程交替访问同步块、获取锁。若多个线程访问同步块的时间重合的比骄密集就会发生很多自旋造成cpu资源浪费。
重量级锁
重量级锁是轻量级锁受到激烈竞争时,为防止cpu被自旋的线程浪费膨胀而来,因此重量级锁肯定是应付大量线程同时访问同步块的情景。让申请锁失败的线程阻塞后,cpu的负担会减小不少,因此数据的吞吐量也就上来了。
汇总表格:
Synchronized机制下偏向锁、轻量级锁、重量级锁的适用场景的更多相关文章
- 【转载】Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference
参考文章: http://blog.csdn.net/chen77716/article/details/6618779 目前在Java中存在两种锁机制:synchronized和Lock,Lock接 ...
- java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明
警告⚠️:本文耗时很长,先做好心理准备 本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态:本文采用大量实例及分析,请耐心看完,谢谢 先来看一下hotspot的 ...
- Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)
不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchro ...
- 内部锁之一:锁介绍(偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景)
一.内部锁介绍 上篇文章<Synchronized之二:synchronized的实现原理>中向大家介绍了Synchronized原理及优化锁.现在我们应该知道,Synchronized是 ...
- 同步机制之一--Synchronized,以及此机制下的锁的本质和种类
Java中,为了实现同步的操作临界区,线程在执行临界区的代码时,需要获得某个对象的锁.本文介绍获得对象的锁的方法之一----Synchronized关键字. Synchronized关键字的用法 Cl ...
- Java并发之锁升级:无锁->偏向锁->轻量级锁->重量级锁
Java并发之锁升级:无锁->偏向锁->轻量级锁->重量级锁 对象头markword 在lock_bits为01的大前提下,只有当是否偏向锁位值为1的时候,才表明当前对象处于偏向锁定 ...
- jvm锁的四种状态 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态
一:java多线程互斥,和java多线程引入偏向锁和轻量级锁的原因? --->synchronized是在jvm层面实现同步的一种机制. jvm规范中可以看到synchronized在jvm里 ...
- 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)
接触过线程安全的同学想必都使用过synchronized这个关键字,在java同步代码快中,synchronized的使用方式无非有两个: 通过对一个对象进行加锁来实现同步,如下面代码. synchr ...
- JVM锁简介:偏向锁、轻量级锁和重量级锁
转自:https://www.aimoon.site/blog/2018/05/21/biased-locking/ 比较复杂,简略见另一篇:https://www.cnblogs.com/twohe ...
随机推荐
- spark 源码分析之七--Spark RPC剖析之RpcEndPoint和RpcEndPointRef剖析
RpcEndpoint 文档对RpcEndpoint的解释:An end point for the RPC that defines what functions to trigger given ...
- 走近OPENCV // opencv 2.4.9+vs2013配置
一直很懒去配opencv,这几周忍不了终于抽空来配了一下环境... 用的是旧版opencv2.4系列,最新到3.0了,之后再看看教程不知道有什么特别大的区别. (FF14国服没有4.0 // 8.19 ...
- windows下用easybcd引导ubuntu出现grub的解决方案
linux安装时吧boot挂在到单独的分区 如果grub覆盖了mbr的话可以用pe工具箱修复windows的mbr linux引导项选grub 驱动器选安装时挂载了/boot的分区 添加条目 启动即可 ...
- 【iOS】Xcode unexpected code bundles
如图所示: ……
- zabbix监控WEB网站性能
一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...
- 网站安装SSL证书成为影响SEO排名的重要因素之一
百度谷歌先后发声明倡导站长们使用https链接,同样的网站,https站点要比http站点拥有更好的排名权重.https已经是网站SEO必须要考虑的环节之一了,而https的必要条件就是安装SSL证书 ...
- AppBoxFuture: 123挨个站-数据按序存储
最近几天在优化存储的编码规则,顺带把之前设计了但未实现的倒排序一并实现了.由于所有数据(元数据.实体.索引等)都映射至RocksDB的Key-Value存储,所以必须扩展RocksDB的自定义比较 ...
- java课堂_动手动脑4
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 答:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0 ...
- 洛谷P2763题解
吐槽一下:蜜汁UKE是什么玩意?! 题目分析: 观察题面,对于给定的组卷要求,计算满足要求的组卷方案,可以发现这是一道明显的有条件的二分图匹配问题,于是考虑建模. 建一个超级源点,一个超级汇点:源点与 ...
- PHP 的一些底层知识
本篇内容比较干涩,请自备矿泉水 文章分6个主题进行讲解 PHP运行机制和原理 PHP底层变量数据结构 PHP传值赋值中的COW特性 PHP垃圾回收机制 PHP中数组底层分析 PHP数组函数分类 PHP ...