synchronized原理详解

什么是 synchronized?

synchronized 是 Java 中用于实现线程同步的关键字,它可以确保多个线程在访问共享资源时的互斥性,防止数据竞争和不一致状态。

底层实现机制

在 JVM 层面,synchronized 的实现依赖于对象头中的 Mark WordMonitor(监视器) 机制。根据竞争程度不同,JVM 会动态调整锁的状态:

字节码层面分析

使用 synchronized 修饰方法或代码块时,编译后的字节码会包含 monitorentermonitorexit 指令(代码块方式),而同步方法则通过 ACC_SYNCHRONIZED 标志位标识。

锁优化与升级流程

JVM 对 synchronized 做了大量优化,锁只能升级不能降级,典型路径为:

无锁 → 偏向锁 → 轻量级锁 → 重量级锁

这种设计兼顾了低竞争下的性能与高竞争下的稳定性。

使用建议