偏向锁简介

偏向锁:

hotspot的开发者发现大部分情况,资源都是被同一个线程所占用,因此为了节省线程切换的资源从而引入偏向锁

偏向锁定义:

先理解一个基本概念:普通对象头有2个字宽=8个字节=64bit,数组对象的话有3个字段,多出来的那个字宽存储数组长度

长度名称含义解释说明
1个字宽Mark Word锁信息和对象的hashcode
1个字宽Class Metadata address对象数据的指针
1个字宽Array lengh数组长度

序列图:

Created with Raphaël 2.1.2 线程 线程 对象 对象 线程A(ID:0X1234)想要独占该对象的 Mark Word (锁标识:01,偏向锁标识:0) 线程A查有没有自己的线程ID。没有则使用CAS竞争并加锁,然后将偏向锁标识变为1 Mark Word (锁标识:01,偏向锁标识:1,该对象锁的线程ID:0X1234) 线程A成功竞争到了锁 Mark Word (锁标识:01,偏向锁标识:1,该对象锁的线程ID:0X1234) 线程A再次访问该对象,则直接检测对象所持有线程ID 线程ID匹配 线程B(ID:0X6789)访问对象,测试线程ID Mark Word (锁标识:01,偏向锁标识:1,该对象锁的线程ID:0X1234) 线程ID不匹配,并且该对象偏向锁标识已经为1 线程B尝试使用CAS将对象的MARK WORD中线程ID指向自己 等待全局安全点,线程A被暂停,如果线程A依然存活,B竞争成功,则变更对象线程ID Mark Word (锁标识:01,偏向锁标识:1,该对象锁的线程ID:0X6789) 线程C(线程ID:0x8549)尝试使用CAS将对象的MARK WORD中线程ID指向自己 等待全局安全点,线程B被暂停,如果线程B不存活,对象头变为无锁,清除线程ID Mark Word (锁标识:01,偏向锁标识:0)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值