当前位置: 首页 > news >正文

synchronized轻量级锁优化

synchronized优化轻量级锁

使用场景

如果一个对象虽然有多个线程访问,但多线程访问时间是错开的,也就是没有竞争,那么可以使用轻量级锁优化;

在这里插入图片描述

原理

1、每个线程的栈帧中有锁记录

包括:记录锁对象的地址Object reference、锁记录地址;

在这里插入图片描述

2、锁对象指针尝试执行对象;

锁记录地址和mark word 尝试AQS完成交换;

在这里插入图片描述

3、如果CAS成功,标志位由00变为01表示加锁

在这里插入图片描述

4、如果失败,那么有两种情况;

4.1如果是其他线程已经持有了改锁对象,那么表示有竞争进入锁膨涨;

4.2如果是自己执行了synchronized锁重入,那么lock record记录加1;
在这里插入图片描述

锁记录record如果为null,表示还不是最后一层加的锁直接record记录减1;

锁记录record如果不为null,那么在完成释放锁的时候锁记录需要和mark word 尝试AQS交换回来;

http://www.lryc.cn/news/35912.html

相关文章:

  • python 日期转换 日期字符相关
  • 使用sm4js进行加密和国密sm4的总结
  • c语言面试题目整理
  • 【嵌入式Bluetooth应用开发笔记】第三篇:初探BLUE ALSA应用开发
  • C++基础了解-21-C++ 继承
  • To_Heart—游记——NOI 春季测试
  • Laya小游戏开发,laya3D美术篇——1——关于laya自带的几个shader的基础运用讲解。
  • brew 的安装与使用 (Apple Silicon CPU的Mac机型完成适配)
  • 传输线的物理基础(四):传输线的特性阻抗
  • (六十九)以MySQL单表查询来举例,看看执行计划包含哪些内容(2)?
  • Linux发行版的backport
  • GitLab 存储型XSS漏洞 (CVE-2023-0050)
  • HTTPS加密流程
  • Binder通信原理与弊端解析
  • 网络使用情况监控
  • 业务流程图TFD和数据流程图DFD例题
  • react框架基础入门
  • C++ ,JNI, Java 数据传递全解(一)
  • 【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
  • Spring基础与创建
  • 虚拟机系列教程:虚拟机克隆
  • iperf3主页官方信息
  • Linux-0.11 kernel目录进程管理sched.c详解
  • AI已到,普通人的机会在哪里?
  • CSP-J2022入门组二轮补赛试题(山东)T2:宴会
  • ubuntu 使用 CMake 构建 Qt5 项目
  • ZooKeeper命令及JavaAPI操作
  • 云医疗信息系统源码(云HIS)商业级全套源代码
  • u盘拔掉再插上去文件没了原因|文件恢复方法
  • CorelDRAW2023详解新增七大功能 ,CorelDRAW2023最新版本更新怎么样?