当前位置:网站首页>偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的
偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的
2022-08-05 09:20:00 【51CTO】
轻量级锁升级重量级锁
- 只有一个线程抢夺时JVM上偏向锁
- 在出现一个线程时就是轻量级锁。轻量级锁通过CAS进行上锁。失败则会发生自旋
- 当自旋大一定程度或者,此时又出现一个线程上锁,此时会切换成重量级锁。
- 我们能够发现,在出现两个线程进行轻量级锁争抢的时候会切换成重量级锁。
- 都是重量级锁的同时,我发现其他信息是固定的,这个也和我们在内存布局中一样,这里指向的是锁指针,对应的是C++中ObjectMonitor对象指针。重量级指针内部有一个队列就是将没抢上的线程挂起用的。所以这里不会变化。这里注意和线程id进行区分
- 重量级锁用完之后就会释放掉成无锁状态。
锁操作
- 上面我们分别介绍了偏向锁,轻量级锁,重量级锁的定义及场景切换。这里我们稍微总结下三种锁使用场景
- 偏向锁在JVM开启偏向条件下,默认是偏向锁
- 当有另外一个线程再次对对象进行加锁时,不管有没有发生竞争都是轻量级锁。只不过发生竞争时会通过CAS抢占,CAS一定次数还是失败则升级重量级锁。而偏向锁切换到轻量级锁的过程是先撤销偏向锁在上轻量级锁
- 当有两个及以上的时候发生竞争就会切换成重量级锁。切换之前会有一个线程通过自旋等待。默认是10次。这是不固定的,因为有自适应自旋锁的存在
- 除了锁之间的关系,我们还需要掌握下各个锁的原理,上锁解锁的全过程
偏向锁
上锁
- 首先我们检测下状态位是否是
101
。如果是在看下当前markword存储的threadId是否是当前线程。如果是当前线程则可以执行当前代码块 - 如果不是当前线程,则通过CAS写入当前线程;如果写入成功则说明偏向锁上锁成功,继续执行当前代码块
- 如果CAS写入失败,则说明有资源抢占。偏向锁升级成轻量级锁。
总结
-
synchronized
作为被人诟病的一个设计,在JDK1.6之后真的改版了,不要在拿之前的眼光看待他了。毕竟偏向锁和轻量级锁的引入已经将性能提升了很多了。 - 偏向锁默认进行,节省调度时间
- 轻量级锁通过CAS完成等待,省调线程挂起,唤醒等操作
- 重量级将线程串行化,保障了线程之间的并发
- 三种状态锁循序渐进给我们适配不同程度的并发需求
边栏推荐
猜你喜欢
Two-table query average grouping in sql server
Redis源码解析:Redis Cluster
放大器OPA855的噪声计算实例
21 Days of Deep Learning - Convolutional Neural Networks (CNN): Weather Recognition (Day 5)
工程制图试题
开源一夏|OpenHarmony如何查询设备类型(eTS)
Hundred lines of code launch red hearts, why programmers lose their girlfriends!
sql server中 两表查询 平均数 分组
MySQL内部函数介绍
工程制图直线投影练习
随机推荐
thinkPHP5 realizes clicks (data increment/decrement)
How ali cloud storage database automatically to speed up the loading speed of www.cxsdkt.cn how to set up the case?
21 Days of Deep Learning - Convolutional Neural Networks (CNN): Weather Recognition (Day 5)
Overall design and implementation of Kubernetes-based microservice project
如何实现按键的短按、长按检测?
施一公:科学需要想象,想象来自阅读
openpyxl to manipulate Excel files
线程之Happens-before规则
express hot-reload
【LeetCode】623. Add a row to the binary tree
Why is pnpm hitting npm and yarn dimensionality reduction?
Happens-before rules for threads
长达四年的减肥记录
2022.8.3
js graphics operation one (compatible with pc, mobile terminal to achieve draggable attribute drag and drop effect)
无题十二
ECCV 2022 Oral Video Instance Segmentation New SOTA: SeqFormer & IDOL and CVPR 2022 Video Instance Segmentation Competition Champion Scheme...
汇编语言(8)x86内联汇编
CPU的亲缘性affinity
使用HBuilder离线本地打包ipa教程