所有分类
  • 所有分类
  • 未分类

Java-synchronized之锁的升级

简介

本文介绍Java的synchronized的锁的升级过程。

锁的升级是单向的:只能从低到高升级,不会出现锁的降级。

锁的升级过程

  1. JVM 有偏向锁启动延迟(默认是4秒)
  2. 若不考虑偏向锁的启动延迟,当仅有一个线程拿锁的时候,锁对象的状态是偏向锁状态
  3. 当多个线程拿锁的时候,若是交替拿锁不发生竞争或者发生竞争线程自旋的次数小于某阈值,偏向锁升级成轻量级锁
    • 自旋次数的默认值是10,可以通过-XX:PreBlockSpin来更改
  4. 当自旋的次数超过某阈值,轻量级锁升级成重量级锁。

锁的类型

偏向锁

乐观锁:通过CAS操作竞争锁。

轻量级锁

乐观锁:通过CAS操作竞争锁。

重量级锁

重量级锁是悲观锁,通过monitor实现,每一个锁对象都有且仅有一个自己的monitor对象。 ​

3

评论2

请先

  1. 自旋次数的默认值是10,可以通过-XX:PreBlockSpin来更改
    yo lo 2023-08-15 2
    • 是的,我把你的这个评论内容给更新到文章中去了~
      自学精灵 2023-08-15 0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录