多线程中 synchronized 锁升级的原理
下文笔者讲述多线程中锁升级的相关简介说明,如下所示
synchronized 锁升级原理
对象的对象头里有一字段: threadid 首次访问锁对象 threadid 为空,JVM 让其持有偏向锁 并将 threadid 设置为当前线程 id 再次访问锁对象 会先判断 threadid 是否与当前线程 id 一致 若一致则可以直接使用此对象 若不一致,则升级偏向锁为轻量级锁 等待锁对象中 通过自旋循环一定次数来获取锁 执行一定次数后 若还未能正常获取到要使用的对象 此时就会把锁从轻量级锁升级为重量级锁
锁的升级的目的
锁升级,是为了降低使用锁带来的性能消耗 Java 1.6 之后优化 synchronized 的实现方式 使用了偏向锁升级为轻量级锁再升级到重量级锁的方式 从而降低使用锁带来的性能消耗
锁的升级不可逆
无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁,且锁升级的顺序是不可逆的
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。