当前位置:   article > 正文

synchronize锁升级机制总结

锁升级机制

锁升级(膨胀)过程

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/309841?site
推荐阅读
相关标签
  

闽ICP备14008679号