synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在 第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置 为其线id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果 一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,如果在轻量级锁状态下,又有线程来竞争锁,这时候会通过CAS+自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的锁对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized锁的升级。
锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的 方式,从而减低了锁带来的性能消耗。
锁升级的原理
于 2024-01-24 18:04:14 首次发布