锁升级的过程

锁升级的过程

锁升级分为两种情况:

  • 当偏向锁开关打开时(-XX:+UseBiasedLocking)的升级过程如下(默认打开):
    无锁 -> 偏向锁 ->轻量级所->重量级锁。

具体为:对象首先是无锁状态,当对象第一次被线程获取的时候,虚拟机将会把对象头中的标志位设置为01,即偏向模式。同时使用CAS方式将获取到这个锁的线程id记录到对象的Mark Word中,如果操作成功,持有偏向锁
的线程下一次进入这个锁的同步块时,不需要在进行任务同步操作。

当有另一个线程去尝试获取这个锁时,偏向锁就宣告结束。根据对象是否处于锁定状态恢复到无锁(01处于未锁定状态)或者轻量级锁(00);进入轻量级锁的流程是,如果同步对象没有被锁定,虚拟机尝试CAS将这个对象的Mark Word更新为指向该线程的Lock Record(记录该兑现的Mark Word拷贝),如果成功,则该线程就持有了这个对象锁,并将锁标志位转变成00。

如果失败,说明对象的Mark Word已经指向了某个线程的Lock Record;如果指向的是当前线程的Lock Record,则说明当前线程已经拥有这个对象锁,那就可以直接进入同步块继续执行。否则说明这个对象锁已经被其他线程占用了。如果有两个以上的线程同时竞争一个锁,那轻量级锁就会膨胀为重量级锁,锁的状态变成10,那么Mark Word指向的就是重量级锁(互斥量)的指针,后面等待的锁也要进入阻塞状态。

  • 当偏向锁关闭的时候的时候的升级过程
    无锁 ->轻量级所->重量级锁。
    类似上述过程。

  • 偏向锁:
    偏向锁是为了消除在无

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值