【java基础 > 锁升级】

围绕synchronize关键字说下三个锁升级

 

无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁

 

1,Mark Word
2,指向类的指针
3,数组长度(只有数组对象才有)

锁的信息都是放在对象头的mark word里面的,具体信息如下:

【说个小知识点 yc的年龄最大的是15 cms默认的是6,4bit的最大就是15】

1.无锁态,一个对象没有被争抢,里面会记录对象的hash等信息

2.有线程来争抢,抢到锁后jvm会把持有锁的线程id记录到mark word里面。针对可重入锁 或者并发小的情况,偏向锁还是蛮好的。并发度比较大的情况下,需要停止偏向锁。 -usebiasedLock。

3.多线程争抢时 会升级成轻量级锁,这个时候争抢锁的线程会在自己的线程栈里面生成lockRecord(里面会记录原先 hashcode的信息)大家通过cas来更新mark word里面的信息

4.自旋次数到达10次,或者会升级成重量级锁。 重量级锁就动用到了操作系统的原语。java变异看到的就是 monitorEnter monitorExist。这个时候锁是由操作系统来分配的,不同的操作系统 底层的指令也不是相同的(轻量级锁为啥要升级成重量级锁 还是比较简单的,这个可以想下)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值