并发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 并发
有哪些支持并发的集合?共源 1
Java 并发并发JavaJava 并发
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(并发).md
knowledge_noteQuestion 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 通过计数器记录持有状态。