关于偏向锁升级

偏向锁升级

对象锁创建时偏向锁标志为0(偏向锁是默认开启的,而且开始时间一般是程序启动几秒后,所以过段时间会将偏向锁标志改为1),锁状态为01。

当第一个线程t1访问同步代码块并获取锁对象时,会将锁对象头的MarkWord中hashcode等字段修改为t1的线程id,同时将对象锁的偏向锁标志改为1。此时t1获得对象锁,对象锁为偏向锁。

当t1线程将同步代码块执行完,退出同步代码块后,此时锁仍为偏向锁,且对象头中的MarkWord仍保存着t1 的线程id,第二个线程t2访问同步代码块并获取锁对象时,通过比较锁对象头中的线程id发现不一致,将锁对象升级为轻量级锁,锁状态为00。当t2执行完同步代码块,退出同步代码块后,解开轻量级锁,锁对象恢复为原来的无锁状态,即偏向锁标志为0,锁状态为01。

当t1线程同步代码块还没执行完,t2线程也来访问同步代码块时,此时是线程交错,t1线程会在全局安全点时被暂停,同时将偏向锁升级为轻量级锁,然后t1继续执行,而t2进行自旋来获取锁对象,如果t2自旋超过一段时间仍未获得锁对象,则将t1的轻量级锁升级为重量级,然后将t2线程加入到重量级锁的EntryList阻塞队列中,等待t1执行完同步代码块后将其唤醒。

以上为个人复习总结,若有错误,希望指正。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值