如果偏向锁失败,虚拟机不会立刻升级为重量级锁。它会尝试使用一种优化手段,这种手段称为轻量级锁(1.6 之后加入的)。轻量级锁并非是为了替代重量级锁,其本意是在没有多线程竞争的情况下,减少传统重量级锁使用操作系统互斥量所产生的性能消耗,因为使用轻量级锁时,无需申请互斥量。另外,轻量级锁在加锁时用到了 CAS 操作,在解锁时也用到了 CAS 操作。关于轻量级锁加锁和解锁的原理,可以查看《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》第二版的 13 章第三节锁优化。
轻量级锁能提升程序同步性能的依据是绝大部分锁在整个同步周期内不存在竞争,这是经验数据。若没有竞争,轻量级锁利用 CAS 操作避免了互斥操作的开销。然而,若存在锁竞争,除了互斥量开销外,还会额外发生 CAS 操作,所以在有锁竞争的情况下,轻量级锁比传统的重量级锁更慢。如果锁竞争激烈,那么轻量级将很快膨胀为重量级锁!