yue_hu 2021-06-24 10:05 采纳率: 100%
浏览 71
已结题

偏向锁获取与竞争问题

查了很多关于偏向锁的资料,关于偏向锁的获取流程。

首先如果偏向标志位为0说明处于无锁状态,直接CAS获取偏向锁,成功则获得偏向锁,失败说明存在竞争,膨胀为轻量级锁。

如果偏向标志位为1说明处于可偏向状态,此时判断偏向线程ID是否为当前线程ID,如果是则直接执行代码块,如果不是,则执行CAS操作竞争偏向锁。我的疑问就在这里?CAS是怎么交换的,直接把ThreadAID更新ThreadBID吗?这样的话如果没有ThreadC参与的话不是必定成功的吗?但是如果ThreadA还在同步代码块内,ThreadB直接CAS把偏向锁改为自己不是产生并发问题了吗?

还是说是ThreadB发现偏向线程ID不是自己后,会通知JVM,然后JVM在到达安全点之后判断ThreadA是否存活,如果不存活则进行锁撤销,ThreadB重新通过CAS进行竞争偏向锁,如果存活则膨胀为轻量级锁。如果是这种的话ThreadB发现偏向线程ID不是自己后会暂停ThreadA吗,还是说并不会暂停ThreadA直到安全点。如果暂停那么暂停ThreadA以及判断ThreadA是否存活,进行锁撤销是JVM的动作吗?还是由ThreadB完成。

希望大佬解惑。

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-06-28 19:16
    关注

    你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

    您可以点击问题下方的【编辑】,进行补充修改问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月22日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度