深入分析synchronized的实现原理

非常吊的一篇文章,让你瞬间理解锁的定义:

https://blog.csdn.net/chenssy/article/details/54883355

synchronize锁:

锁有两个中重要东西:Monitor   对象头【或者叫Markword +class pointer】

 

Monitor: 其实就是一个对象,可以说当遇到synchronize的就能自动生成这样一个对象,与需要加锁代码(synchronized(this){})的对象进行关联,这里关联的对象就是this所指的对象。【描述的不太确切,但是是个意思】;

 

Markword: 对象头里面的重要信息,记录了对象的hashcode, Gc年龄,是否偏向锁,锁的状态 

Klass Point:是是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

 

Monitor会做的重要事情:

记录threadID-----,这个是锁冲入的一个重要因素,这个是根据线程来的;

对象的hashcode---保存从对象头拷贝过来的HashCode值(可能还包含GC age)---用来判断是新来的线程对象,是否与锁定的对象一致,若一直,就能进行操作,若不一致,则锁就开始升级

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值