通过在控制台中的打印内容我们可以发现,锁的状态一共经历了以下几个变化步骤:
- biasable状态
- biased状态
- thin lock状态
- fat lock状态
重量级锁当一把锁已经处于轻量级锁的状态时,如果此时又有多个线程来尝试获取锁,那么锁就会被多个线程以自旋的方式来请求访问,当访问的次数达到一定上限之后,synchronized就会自动升级为重量级锁的状态了 。
当升级为重量级锁的情况下,锁对象的mark word中的指针不再指向线程栈中的lock record,而是指向堆中与锁对象关联的monitor对象 。当多个线程同时访问同步代码时,这些线程会先尝试获取当前锁对象对应的monitor的所有权:
- 获取成功,判断当前线程是不是重入,如果是重入那么recursions+1
- 获取失败,当前线程会被阻塞,等待其他线程解锁后被唤醒,再次竞争锁对象
有哪几种方式可以使一把锁升级为重量级状态?
- 调用wait方法
- 在同步代码块中调用对象的hashcode方法

文章插图
小结其实JVM已经对synchronized进行了优化 。可以直接用,至于锁的力度如何,JVM底层已经做好了我们直接用就行 。不过作为一名工程师,了解这些底层原理还是可以增加我们自身内部的功力的 。
原文链接:
https://mp.weixin.qq.com/s/LsV9HKl8AW4vL4rz8iigxw
【30分钟彻底弄懂 synchronized 锁升级过程】
推荐阅读
- 动感单车30分钟和跑步30分钟减肥需要多长时间?
- 灰指甲要怎么治才能彻底的根除掉 灰指甲怎么治疗除根
- 教你一招,彻底清理C盘垃圾 如何清理c盘
- 如何才能让静电彻底消失 静电怎么消除
- 肌性斜颈能彻底治好吗
- 抑郁症能被彻底治愈且不再复发吗 抑郁症能彻底治愈吗
- 刘海屏|彻底告别刘海 曝iPhone 15全系叹号屏
- 拜登正式拿下"悬念州"亚利桑那-拜登打破僵局-拜登彻底赢了
- 努比亚|努比亚Z40S Pro玩30分钟《王者荣耀》:平均120帧 稳成一条直线
- 快走30分钟消耗热量是多少?
