java偏向锁以及它的升级

先科普一下:我们经常说悲观锁,乐观锁,公平锁,非公平锁,读写锁等等,这些概念并不是对立的关系,而是从不同角度看待对锁的分类,比如synchronized,既是非公平锁又是可重入锁。

偏向锁的出现的背景:jvm作者研究发现,大部分情况锁不仅不存在竞争,而且总是由同一个线程获得。为了减少获取的代价,引入了偏向锁。
获取偏向锁:线程1进入同步,在锁的对象的对象头(理解成对象的信息表)有个是否是偏向锁,以及偏向的线程id。如果偏向的线程id不是自己,线程1就用CAS操作替换成自己,成功就获取到锁了,退出同步块的时候,不去修改偏向的线程id,下次进来就能直接获取到锁了。线程2进来了,用CAS替换(此时偏向的线程id是1),如果获取不到锁,就会在线程1的安全点暂停它,然后线程2将锁升级成轻量级锁。

轻量级锁:一句话就是获取锁会变成自旋锁,一定次数还失败就会升级重量级锁。

重量级锁:线程获取锁变成阻塞了,等待被唤醒。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值