Java的synchronized是怎么实现的?
Java的synchronized是怎么实现的?
synchronized 实现原理依赖于 JVM 的 Monitor (监视器锁)和对象头(Object Header)。
当 synchronized 修饰在方法或代码块上时,会对特定的对象或类加锁,从而确保同一时刻只有一个线程能执行加锁的代码块。
- synchronized 修饰方法:会在方法的访问标志中增加一个 ACC_SYNCHRONIZED 的标志。每当一个线程访问该方法时,JVM 会检查方法的访问标志。如果包含 ACC_SYNCHRONIZED 的标志,线程必须先获得该方法对应的对象的监视器锁(即对象锁),然后才能执行该方法,从而保证方法的同步性。
- synchronized 修饰代码块:会在代码块的前后插入 monitorenter 和 monitorexit 字节码指令。可以把 monitorenter 理解为加锁,monitorexit理解为解锁。