ACC_SYNCHRONIZED 标志是什么
acc_synchronized 是 java 字节码中的一个访问标志(access flag),用于标记方法为同步方法。当 jvm 执行到被此标志修饰的方法时,会自动获取对象锁并处理异常释放锁的逻辑,开发者无需手动编写 monitorenter 和 monitorexit 指令。

同步方法与非同步方法的字节码差异
通过对比编译后的字节码,可以清晰看到同步方法多出了 ACC_SYNCHRONIZED 标志,且不再需要显式的锁操作指令。非同步方法则保持普通方法的形态,由调用者决定是否需要加锁。

public class SyncExample {
public synchronized void syncMethod() {
System.out.println("Sync");
}
public void normalMethod() {
System.out.println("Normal");
}
}同步块与同步方法的实现区别
对于代码块级别的同步(synchronized (obj) { ... }),JVM 不会使用 ACC_SYNCHRONIZED 标志,而是生成 monitorenter 和 monitorexit 指令。这意味着同步块的锁获取和释放是显式的,且必须确保在异常情况下也能正确释放锁,通常会有两个 monitorexit 指令,一个用于正常退出,一个用于异常退出。
立即学习“Java免费学习笔记(深入)”;

public class BlockSyncExample {
public void blockSync(Object obj) {
synchronized (obj) {
System.out.println("Block Sync");
}
}
}


















