模型服务连接失败
并发JavaJava 并发
分类
Java 并发
难度
未设置
来源数
1
更新时间
2026/03/28 21:25

答案

synchronized在修饰代码块的时候,是在字节码中代码块前添加monitorenter,代码块后添加monitorexit,代表同步代码的开始和结束。当执行monitorenter的时候,线程久长时获取monitor,此时会判断锁的计数器是否为0,为0则获取,并加1,不为0则获取失败。当对象锁的拥有者执行monitorexit的时候,就会释放锁,并将锁的计数器减1,计数器为0则释放成功。 修饰方法时,会在方法的字节码中加入一个ACC_SYNCHRONIZED标识,来说明当前方法是同步方法。然后本质上同样是去获取monitor。

相关题目(5)

Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 45: synchronized 的底层原理是什么? Source answer: synchronized在修饰代码块的时候,是在字节码中代码块前添加monitorenter,代码块后添加monitorexit,代表同步代码的开始和结束。当执行monitorenter的时候,线程久长时获取monitor,此时会判断锁的计数器是否为0,为0则获取,并加1,不为0则获取失败。当对象锁的拥有者执行monitorexit的时候,就会释放锁,并将锁的计数器减1,计数器为0则释放成功。 修饰方法时,会在方法的字节码中加入一个ACC_SYNCHRONIZED标识,来说明当前方法是同步方法。然后本质上同样是去获取monitor。 Reviewed answer: synchronized 修饰代码块时依赖 monitorenter 和 monitorexit 指令操作对象监视器 monitor;修饰方法时通过 ACC_SYNCHRONIZED 标记,底层本质也是获取和释放 monitor。monitor 通过计数器记录持有状态。