Synchronized锁升级过程

  1. 无锁状态(无锁):当一个线程访问一个没有被锁定的Synchronized代码块时,处于无锁状态。此时,线程可以直接进入临界区执行代码,不需要进行任何锁协调。

  2. 偏向锁状态(偏向锁):当一个线程访问一个Synchronized代码块时,会尝试获取偏向锁。如果当前没有其他线程竞争同一个锁,并且之前没有发生过锁竞争,那么当前线程会获得偏向锁,并将对象头中的线程ID记录下来。此后,线程再次进入同步块时,无需再次竞争锁,直接进入临界区执行代码。

  3. 轻量级锁状态(轻量级锁):当多个线程竞争同一个锁时,偏向锁会升级为轻量级锁。在轻量级锁状态下,线程会尝试使用CAS(Compare and Swap)操作来获取锁,如果成功获取锁,则进入临界区执行代码。如果获取锁失败,表示有其他线程竞争锁,那么线程会膨胀为重量级锁。

4.自旋锁
自旋锁会假设在不久将来,当前的线程可以获得锁,因此虚拟机会让当前想要获取锁的线程做几个空循环(这也是称为自旋的原因),一般不会太久,可能是50个循环或100循环,在经过若干次循环后,如果得到锁,就顺利进入临界区。如果还不能获得锁,那就会将线程在操作系统层面挂起,这就是自旋锁的优化方式,这种方式确实也是可以提升效率的。最后没办法也就只能升级为重量级锁了。

  1. 重量级锁状态(重量级锁):当多个线程竞争同一个锁,并且轻量级锁获取锁失败时,锁会升级为重量级锁。在重量级锁状态下,线程会进入阻塞状态,等待锁的释放。当锁的持有者释放锁时,等待的线程会被唤醒,竞争锁的所有线程再次尝试获取锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值