当前位置:网站首页>Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?
Bias lock/light lock/heavy lock lock is healthier. How is locking and unlocking accomplished?
2022-08-05 09:29:00 【51CTO】
轻量级锁升级重量级锁
- 只有一个线程抢夺时JVM上偏向锁
- 在出现一个线程时就是轻量级锁.轻量级锁通过CAS进行上锁.失败则会发生自旋
- 当自旋大一定程度或者,此时又出现一个线程上锁,此时会切换成重量级锁.
- 我们能够发现,在出现两个线程进行轻量级锁争抢的时候会切换成重量级锁.

- 都是重量级锁的同时,我发现其他信息是固定的,这个也和我们在内存布局中一样,这里指向的是锁指针,对应的是C++中ObjectMonitor对象指针.重量级指针内部有一个队列就是将没抢上的线程挂起用的.所以这里不会变化.这里注意和线程id进行区分
- 重量级锁用完之后就会释放掉成无锁状态.

锁操作
- 上面我们分别介绍了偏向锁,轻量级锁,重量级锁的定义及场景切换.这里我们稍微总结下三种锁使用场景
- 偏向锁在JVM开启偏向条件下,默认是偏向锁
- 当有另外一个线程再次对对象进行加锁时,不管有没有发生竞争都是轻量级锁.只不过发生竞争时会通过CAS抢占,CAS一定次数还是失败则升级重量级锁.而偏向锁切换到轻量级锁的过程是先撤销偏向锁在上轻量级锁
- 当有两个及以上的时候发生竞争就会切换成重量级锁.切换之前会有一个线程通过自旋等待.默认是10次.这是不固定的,因为有自适应自旋锁的存在
- 除了锁之间的关系,我们还需要掌握下各个锁的原理,上锁解锁的全过程
偏向锁
上锁
- 首先我们检测下状态位是否是
101.如果是在看下当前markword存储的threadId是否是当前线程.如果是当前线程则可以执行当前代码块 - 如果不是当前线程,则通过CAS写入当前线程;如果写入成功则说明偏向锁上锁成功,继续执行当前代码块
- 如果CAS写入失败,则说明有资源抢占.偏向锁升级成轻量级锁.




总结
-
synchronized作为被人诟病的一个设计,在JDK1.6之后真的改版了,不要在拿之前的眼光看待他了.毕竟偏向锁和轻量级锁的引入已经将性能提升了很多了. - 偏向锁默认进行,节省调度时间
- 轻量级锁通过CAS完成等待,省调线程挂起,唤醒等操作
- 重量级将线程串行化,保障了线程之间的并发
- 三种状态锁循序渐进给我们适配不同程度的并发需求
边栏推荐
- 我的杂记链接
- 六年团队Leader实战秘诀|程序员最重要的八种软技能 - 脸皮薄容易耽误事 - 自我营销
- 茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
- The Secrets of the Six-Year Team Leader | The Eight Most Important Soft Skills of Programmers
- 2022-08-01 回顾基础二叉树以及操作
- ts/js function pass parameter with function writing
- 2022-08-01 Review the basic binary tree and operations
- CPU的亲缘性affinity
- 【ASM】字节码操作 方法的初始化 Frame
- 欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(下)
猜你喜欢

ECCV 2022 Oral Video Instance Segmentation New SOTA: SeqFormer & IDOL and CVPR 2022 Video Instance Segmentation Competition Champion Scheme...

放大器OPA855的噪声计算实例

深度学习21天——卷积神经网络(CNN):天气识别(第5天)

如何实现按键的短按、长按检测?

js 图形操作一(兼容pc、移动端实现 draggable属性 拖放效果)

express hot-reload

Weekly Report 2022-8-4

Why do I recommend using smart async?

什么是CRM决策分析管理?

ECCV 2022 Oral 视频实例分割新SOTA:SeqFormer&IDOL及CVPR 2022 视频实例分割竞赛冠军方案...
随机推荐
手把手教你纯c实现异常捕获try-catch组件
openpyxl操作Excel文件
2022.8.3
ECCV 2022 Oral Video Instance Segmentation New SOTA: SeqFormer & IDOL and CVPR 2022 Video Instance Segmentation Competition Champion Scheme...
16种香饭做法全攻略
Example of Noise Calculation for Amplifier OPA855
使用HBuilder离线本地打包ipa教程
请问大佬们 ,使用 Flink SQL CDC 是不是做不到两个数据库的实时同步啊
使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)
正则表达式replaceFirst()方法具有什么功能呢?
Does flink cdc support synchronization from oracle dg library?
这样写有问题吗?怎么在sql-client 是可以做到数据的同步的
How ali cloud storage database automatically to speed up the loading speed of www.cxsdkt.cn how to set up the case?
2022/8/4 考试总结
欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(下)
按钮上显示值的轮流切换
Why do I recommend using smart async?
Concurrent CAS
什么是CRM决策分析管理?
CVPR 2022 | 将X光图片用于垃圾分割,港中大(深圳)探索大规模智能垃圾分类