Java中synchronized关键字具体用法是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计6697个文字,预计阅读时间需要27分钟。
前言:请看上篇:Java 对象头那些事。文章中的源码都有不同程度的缩减,来源于openjdk8的源代码(tag:jdk8-b120)。
锁优化过程:偏向锁+轻量级锁:markword中保存的线程ID是自己的,且epoch等价于class的epoch。
前言请看上篇:Java 对象头那点事
文章中的源码都有不同程度缩减,来源于openjdk8的开源代码(tag:jdk8-b120)。
锁粗化过程
①:markword中保存的线程ID是自己且epoch等于class的epoch,则说明是偏向锁重入。
②:偏向锁若已禁用,进行撤销偏向锁。
③:偏向锁开启,都进行进行重偏向操作。
④:若进行了锁撤销操作或重偏向操作失败,则需要升级为轻量级锁或者进一步升级为重量级锁。
锁对象在发送锁竞争后会升级为偏向锁,不过当不发生锁竞争时,锁对象依然会升级为偏向锁,这种情况叫匿名偏向。
当jvm启动4s后,会默认给新建的对象加上偏向锁。
本文共计6697个文字,预计阅读时间需要27分钟。
前言:请看上篇:Java 对象头那些事。文章中的源码都有不同程度的缩减,来源于openjdk8的源代码(tag:jdk8-b120)。
锁优化过程:偏向锁+轻量级锁:markword中保存的线程ID是自己的,且epoch等价于class的epoch。
前言请看上篇:Java 对象头那点事
文章中的源码都有不同程度缩减,来源于openjdk8的开源代码(tag:jdk8-b120)。
锁粗化过程
①:markword中保存的线程ID是自己且epoch等于class的epoch,则说明是偏向锁重入。
②:偏向锁若已禁用,进行撤销偏向锁。
③:偏向锁开启,都进行进行重偏向操作。
④:若进行了锁撤销操作或重偏向操作失败,则需要升级为轻量级锁或者进一步升级为重量级锁。
锁对象在发送锁竞争后会升级为偏向锁,不过当不发生锁竞争时,锁对象依然会升级为偏向锁,这种情况叫匿名偏向。
当jvm启动4s后,会默认给新建的对象加上偏向锁。

