轻量级锁
来源:9-3 synchronized底层实现原理-2
慕虎7161837
2020-11-18
老师说第二个线程来竞争锁的时候锁就成了轻量级锁,这个说法不严谨吧?第二个线程如果只接竞争成功,这个时候锁应该还是偏向锁,当它竞争失败的时候锁才会升级成轻量级锁
写回答
1回答
-
慕虎7161837
提问者
2020-11-18
老师,我是这么理解的,您看是否有误。假设有两个线程, A先获取到的就是偏向锁,那么B就会发生自旋等待锁的获取。当B自旋获取到锁时,会检查A是否还存活,如果不,则锁被重置为无锁状态,此时B竞争到锁,将其设置为偏向锁。如果存活,则锁升级为轻量级锁。当B自旋失败没获取到锁时,锁就自动升级为重量级锁,竞争重量级锁时所有的线程都不会发生自旋。并且在以后的竞争中,这把锁都只会是重量级锁的状态。除非发生GC,把锁当垃圾回收。第二种场景,如果有N个线程同时竞争锁,其中只有一个自旋失败没有获取到锁,那么锁也会升级成重量级锁。以上这些理解是否有不准确的地方,有的话,麻烦老师指出纠正一下,谢谢!!
022021-08-01