java 偏向锁怎么升级为轻量级锁
JAVA 怎么 升级 轻量级
2023-09-14 09:07:33 时间
因为偏向锁,锁住对象时,会写入对象头相应的标识,我们先把对象头(官方叫法为:Mark Word)的图示如下(借用了网友的图片):
通过上面的图片,我们可以知道,对象处于偏向锁时,mark word中的偏向锁标记为1,锁标志位为01;下面是分析过jvm源码(biasedLocking.cpp)解析的偏向锁升级流程(忽略一些细节),示例中:线程1当前拥有偏向锁对象,线程2是需要竞争到偏向锁。
- 线程2来竞争锁对象;
- 判断当前对象头是否是偏向锁;
- 判断拥有偏向锁的线程1是否还存在;
- 线程1不存在,直接设置偏向锁标识为0(线程1执行完毕后,不会主动去释放偏向锁);
- 使用cas替换偏向锁线程ID为线程2,锁不升级,仍为偏向锁;
- 线程1仍然存在,暂停线程1;
- 设置锁标志位为00(变为轻量级锁),偏向锁为0;
- 从线程1的空闲monitor record中读取一条,放至线程1的当前monitor record中;
- 更新mark word,将mark word指向线程1中monitor record的指针;
- 继续执行线程1的代码;
- 锁升级为轻量级锁;
- 线程2自旋来获取锁对象;
相关文章
- 怎么用命令提示符运行JAVA代码_java命令提示符如何进入
- java 图片识别 tess4j_JAVA使用Tess4J进行ocr识别
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」
- java单例模式——详解JAVA单例模式及8种实现方式
- java怎么运行_怎样启动JAVA?「建议收藏」
- java集合类面试题_Java集合类相关面试题
- java启动器_JAVA基础:Java 启动器如何查找类
- db4o java,db4o Java版性能测试评估
- java 汉字乱码_Java中文乱码问题
- java获取服务器路径_JAVA获取服务器路径的方法「建议收藏」
- java后台怎么解密md5,Java md5 密码加解密
- idea创建javaweb项目详解_idea怎么创建普通java项目
- vscode配置java环境变量_配置Java
- java记录项目的UV值与PV值
- java设计模式之状态模式详解架构师
- Java基础学习笔记十六 集合框架(二)详解编程语言
- java中的ThreadLocal详解编程语言
- 企业用户选择 Java 多于.NET的几个原因详解编程语言
- Oracle收购Java:瞩目引发的变革(oracle收购java)
- 深入浅出Java配置MySQL数据库(java配置mysql)
- 键使用Java管理Redis过期键(redisjava过期)
- 时间Redis Java操作:设置过期时间(redisjava过期)
- 国内首本系统讲解Java异步编程的书籍-java异步编程实战
- 品阿里 Java 开发手册有感
- Java编程实现MySQL表备份(java备份mysql表)
- Oracle与Java程序融合谱写成功曲(java程序Oracle)
- Java与Oracle同步一种新的数据库模式(java同步oracle)
- 本使用Oracle Java 进行升级新版本带来新体验(oracle java版)
- Java线程中断的本质深入理解
- java生成文件夹和文件的简单示例分享