偏向锁,轻量级锁,重量级锁,锁升级

        1.偏向锁升级轻量级锁

                a.访问Mark Word中偏向锁的标识是否设置成1,锁标志位是否为01,确认为可偏向状态。

                b.如果为可偏向状态,则测试线程ID是否指向当前线程,如果是,进入步骤e,否则进入步骤c。

                c.如果线程ID并未指向当前线程,则通过CAS操作竞争锁。如果竞争成功,则将Mark Word中线程ID设置为当前线程ID,然后执行e;如果竞争失败,执行d。

                d.如果CAS获取偏向锁失败,则表示有竞争。当到达全局安全点(safepoint)时获得偏向锁的线程被挂起,偏向锁升级为轻量级锁,然后被阻塞在安全点的线程继续往下执行同步代码。(撤销偏向锁的时候会导致stop the word)

                e.执行同步代码。

        2.轻量级锁升级到重量级锁

                a.线程在执行同步块之前,JVM会先在当前线程的栈桢中创建用于存储锁记录的空间,并将对象头中的Mark Word复制到锁记录中,线程尝试使用CAS将对象头中的Mark Word替换为指向锁记录的指针。成功,当前线程获得锁,失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。

                b.轻量级解锁时,会使用原子的CAS操作将Displaced Mark Word替换回到对象头,如果成功,则表示没有竞争发生。失败,表示当前锁存在争,锁就会膨胀成重量级锁。

                重量级锁这个状态下,其他线程试图获取锁时,都会被阻塞住,当持有锁的线程释放锁之后会唤醒这些线程,被唤醒的线程就会进行新一轮的夺锁之争

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值