Java 轻量锁与自旋锁问题

我查了好多文章, 基本上都是一样的.

我想问 轻量锁 会发生自旋吗?? 是在 CAS 操作失败后开始自旋吗?

CAS 操作失败之后会升级到重量锁, 那么如果在 CAS操作失败后自旋, 自旋时间内获取到锁, 还会升级到重量锁(多线程竞争情况下会升级重量锁)吗?

如果轻量级锁的更新操作失败了, 虚拟机首先会检查对象的 Mark Word 是否指向当前线程的栈帧, 如果是就说明当前线程已经拥有了这个对象的锁, 就是一次锁重入会重新创建 Lock Record 并将的 Mark Word 设置为 null, 否则说明多个线程竞争锁, 就会膨胀为重量锁.?

轻量锁 升级为 重量锁 时, 是什么时候将 锁标识改为 10?

CAS 操作失败有哪些情况?

阅读 3.2k
1 个回答
一个建议
提问的形式可以参照一下sf的参照标准,问的有点乱

Q:CAS 操作失败有哪些情况?
A: 多个线程操作同一个变量时,操作对象的锁被其他线程获取时。
Q:我想问 轻量锁 会发生自旋吗?? 是在 CAS 操作失败后开始自旋吗?
Q:膨胀的时机?
A:会,自旋的原理就是CAS操作。
这里好好理解下下面这段描述应该就能明白。我不赘述了。
image.png

推荐阅读:不可不说的Java“锁”事
希望能帮到你。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏