Java的轻量级锁是什么?

提问者:帅平 问题分类:面试刷题
Java的轻量级锁是什么?
1 个回答
素手烹茶べ待君归
素手烹茶べ待君归
在虚拟机未启动偏向锁或偏向锁对象发生竞争时,锁对象被线程第一次获取时,会在线程栈帧中创建一块叫做锁记录(Lock Record)的空间,用于存储锁对象 Mark Word 的拷贝。
然后,虚拟机会尝试使用 CAS 将锁对象的 Mark Word 作为锁记录的引用,并将锁记录中的 owner 指向锁对象的 Mark Word。
如果修改成功,那么线程就成功获取了该对象的锁,并且锁对象处于轻量级锁定状态;如果修改失败,虚拟机会检查对象的 Mark Word 是否指向锁记录。
如果是则说明当前线程持有了对象的锁,可以直接进入同步块进行操作,如果对象的 Mark Word 没有指向当前线程的锁记录,则说明有其他线程竞争锁对象,锁将膨胀为重量级锁。
发布于:1个月前 (02-08) IP属地:四川省
我来回答