学习总结:synchronize原理与锁升级过程

本文详细介绍了Java中的synchronized原理,包括其基于JVM内部Monitor实现,以及锁的四种状态:无锁、偏向锁、轻量级锁和重量级锁。文章还探讨了Mark Word在对象头中的作用,以及锁升级过程中线程如何通过CAS操作获取和释放锁。最后,解释了不同锁状态下hashcode值的存储位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

synchronized原理

synchronized本质上是通过JVM的内部对象 Monitor(监视器) 实现的, 基于进入与退出Monitor对象实现同步,而监控器锁的实现又依赖操作系统底层的Mutex lock(互斥锁)实现。

任何一个对象都会有一个monitor对象与其关联,当且一个Monitor被持有后,它将处于锁定状态。

synchronized关键字编译成字节码后,会被翻译成monitorenter 和 monitorexit出现在同步代码块的开始和结尾处。
在这里插入图片描述

monitorenter :每个对象都是一个monitor锁,线程尝试获取锁时的过程如下:
a: 如果monitor的进入数为·0,那么线程会直接获取到锁,并设置1
b: 如果monitor已经被该线程占领,那么进入数会+1
c:如果其他线程占领了,那么该线程会被阻塞。一直到获取该锁为止
monitorexit: 线程退出同步代码块,会执行monitorexit,该线程必须是monitor的所有者。执行完后会将进入数-1,如果减完为
0,那么就会释放锁。

Monitor对象锁是java天生自带的,是一种同步工具,也是一个对象,所有的java对象都有成为Monitor的潜质,因为

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值