首页 > 其他分享 >synchronized升级过程

synchronized升级过程

时间:2024-08-15 16:48:34浏览次数:4  
标签:synchronized 对象 work mark 升级 线程 过程

1.对象有三个区域

对象头/实例数据/对其填充

对象头又包含Mark Word/类型指针->指向方法区/数组长度

Mark Word如下图所示

2.偏向锁

当线程首次进入synchronized,他会将对象头的mark work更新为偏向锁。

JDK已废除

3.轻量锁

当线程获取已被偏向的锁时,会将锁升级为轻量锁。

具体过程是这样

先将对象头的mark work复制到线程栈中

通过CAS操作,将对象头的mark work更新指向线程栈中的记录,如果CAS成功(默认自旋15次)则升级为轻量级锁。

失败则表示已经其他线程操作过了,需要升级为重量级锁

 

为什么要把对象的mark work复制到线程栈中,是因为锁的获取和释放都是成对出现的。

当锁释放的时候,就需要将原有的线程栈mark word恢复到对象头中。

 

4.重量级锁

轻量级锁CAS操作失败,就会升级到重量级锁

 

 

标签:synchronized,对象,work,mark,升级,线程,过程
From: https://www.cnblogs.com/jichenghui/p/18361322

相关文章

  • 企业主数据治理过程
    主数据定义:用来描述企业核心业务实体的数据;应用系统重最基本的业务数据;具有较高业务价值,且跨系统、跨部门重复利用的数据;常见主数据:客户、供应商、组织、人员、账号、物料、会计科目、产品、合同、仓库、银行账号等;主数据建设目标:完成企业主数据管理机制;保证主数据的......
  • 基于Nexus实现配置阿里云代理仓库过程解析
    基于Nexus实现配置阿里云代理仓库过程解析更新时间:2020年07月09日09:19:07  作者:咔咔kk 这篇文章主要介绍了基于Nexus实现配置阿里云代理仓库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Nexus默认远程仓......
  • 基于nexus3配置Python仓库过程详解
    基于nexus3配置Python仓库过程详解更新时间:2020年06月15日09:08:04  作者:三度 这篇文章主要介绍了基于nexus3配置Python仓库过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下搭建Python私服,我们依旧使用ne......
  • SSH升级至9.8p1
    此次升级的环境是CentOS-7.6.1810ssh版本7.4p1准备好升级包后上传至/home目录,上图红色字体就是上传上去的升级包,共计三个,分别是:openssh-9.8p1.tar.gzopenssl-3.2.2.tar.gzzlib-1.3.1.tar.gz第一步,安装编译环境,以及vim等此次CentOS-7.6是最小化安装,几乎没有安装多余......
  • cadence allegro 新建一个PCB文件,从外观尺寸到约束,正确的工作流过程
    前言工欲善其事必先利其器,先头脑清晰的将原理图中需要约束特殊说明的功能和要求提前仔约束管理器中约束好,避免设计后期阶段出现间距不够、空间不够,无法布线的问题。试想下,你辛苦布线布局一周时间,正准备发出去制造时候,领导告诉你,你的固定孔位置不合理,你这条线距离边框太近......
  • Flutter项目移动端SQLite升级指南:解决json_extract函数缺失问题
    引言在Flutter移动端项目中依赖于SQLite的高级功能(如json_extract),在低版本的Android系统上部署时,可能会遇到函数不支持的问题。本文将指导你如何通过升级项目中使用的SQLite版本来解决这一问题。前置条件Flutter项目使用sqflite:^2.3.3+1进行SQLite数据库操作。IMBoyA......
  • 忍龙2 不升级流程
    最近电脑上用模拟器复习了一下忍龙2原版.之前打过忍龙2的不升级武器,不升级血的流程.想过禁忍术,但是有几个地方禁了太难打,就没禁.难点:很多小怪都可以来回跑图,让地图自己检测小怪距离忍龙太远,自动删除小怪.第一关关底,飞燕杀死小怪之后,跑到bos边上,落地吸魂超杀之后3......
  • C++ 编译过程
    源码——>预处理器.i文件——>编译器.s文件——>汇编器.o文件——>链接器——>执行程序 预处理器:读取代码里#开头的命令,并把他插入到程序文本里,生产已.i为后缀名的文件编译器:把.i 文件生成汇编文件 .s汇编器:把汇编文件生成二进制文件.a 链接器:链......
  • 【面试】分别解释一下C++、Java、Python程序的执行过程
    面试模拟场景面试官:你能分别解释一下C++、Java、Python程序的执行过程吗?参考回答示例1.C++程序的执行过程1.1编译过程:源代码编写:开发者编写C++源代码,文件扩展名为.cpp。预编译(Preprocessing):预编译是编译的第一步,使用预处理器(如cpp)对源代码进行处理。这一步主......
  • 面向对象和面向过程
    面向对象和面向过程Java是一种面向对象的编程语言,它支持面向对象编程(OOP)和面向过程编程两种编程范式。下面将分别解释这两种编程范式,并说明它们的区别。面向过程编程(ProceduralProgramming)面向过程编程是一种以过程为中心的编程范式。在这种范式中,问题被分解为一系列的过程或......