synchronize锁升级机制总结

锁升级(膨胀)过程

synchronize锁升级过程:jdk高版本之后对synchronize关键字进行了很多优化,其中一项就是锁升级,以前synchronize默认就是悲观锁,是在JVM层面上加锁的,加锁解锁的开销都比较大。所以引入了偏向锁、轻量级锁、重量级锁。

那么偏向锁、轻量级锁、重量级锁又是什么
偏向锁:我认为偏向锁的关键就是“偏”,偏向于第一个访问的线程。也就是说在无竞争的环境下,有一个线程访问的同步代码块,那么这个锁就会偏向这个线程,下次有线程访问的时候就会判断是不是之前访问过的线程访问,这样就会少一次cas的开销。因为第一次有线程访问同步代码块的时候会用cas把线程id写入mark word中。偏向锁会有一个延迟,程序刚启动的5s内不会出现偏向锁,这点在博主前面jol测试对象头中证明了这点,计算过hashcode值的对象不会加偏向锁,因为对象头没有空间放线程id了。
轻量级锁:轻量级锁体现轻量的点就在于自旋,如果线程访问轻量级锁的同步代码块,会cas判断线程id是否一致,不一致会自旋一定的时间一致cas,如果cas成功就还是轻量级锁。但一般都是失败的,然后轻量级锁就会升级为重量级锁。
重量级锁:jvm层面的两个标识,加锁解锁都会阻塞其他线程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值