轻量级锁

来源:9-3 synchronized底层实现原理-2

慕虎7161837

2020-11-18

老师说第二个线程来竞争锁的时候锁就成了轻量级锁,这个说法不严谨吧?第二个线程如果只接竞争成功,这个时候锁应该还是偏向锁,当它竞争失败的时候锁才会升级成轻量级锁

写回答

1回答

慕虎7161837

提问者

2020-11-18

老师,我是这么理解的,您看是否有误。假设有两个线程, A先获取到的就是偏向锁,那么B就会发生自旋等待锁的获取。当B自旋获取到锁时,会检查A是否还存活,如果不,则锁被重置为无锁状态,此时B竞争到锁,将其设置为偏向锁。如果存活,则锁升级为轻量级锁。当B自旋失败没获取到锁时,锁就自动升级为重量级锁,竞争重量级锁时所有的线程都不会发生自旋。并且在以后的竞争中,这把锁都只会是重量级锁的状态。除非发生GC,把锁当垃圾回收。第二种场景,如果有N个线程同时竞争锁,其中只有一个自旋失败没有获取到锁,那么锁也会升级成重量级锁。以上这些理解是否有不准确的地方,有的话,麻烦老师指出纠正一下,谢谢!!

0
2
慕数据5265627
A先获取偏向锁的话,B进来还会自旋等待锁的获取? 不是看线程id不一致就直接升级了吗?
2021-08-01
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程