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

synchronized的底层实现原理

技术主题

synchronized 是 Java 中用于实现线程同步的关键字。它的底层原理涉及到对象头、Monitor(监视器)和内存屏障等概念。

技术原理

技术一:对象头

对象头:每个 Java 对象在内存中都有一个对象头,用于存储对象的元数据信息,比如对象的哈希码、GC 信息以及锁状态等。对象头的具体结构在 32 位和 64 位系统上略有不同,但其中一部分用于存储锁相关的信息。

技术二:Monitor(监视器锁)

Monitor 是在对象头中用于实现线程同步的一种机制。每个 Java 对象都与一个 Monitor 相关联。当一个线程进入一个由 synchronized 关键字修饰的方法或代码块时,它会尝试获取对象关联的 Monitor,如果 Monitor 处于无锁状态,该线程会成功获取锁,并在对象头中标记为已锁定。如果 Monitor 已被其他线程锁定,那么进入该方法或代码块的线程将被阻塞,直到获取到该 Monitor 的锁。

技术三:内存屏障

内存屏障是为了保证内存可见性和指令重排序的有序执行。在 synchronized 块的进入和退出,都会有相应的内存屏障指令。进入 synchronized 块时,会执行一个 Load Barrier,确保线程从主内存中读取最新的共享变量值。退出 synchronized 块时,会执行一个 Store Barrier,确保线程将更新后的共享变量值写回到主内存。

技术四:锁升级与降级

Java

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

相关文章:

  • 屏幕取色器Mac版_苹果屏幕取色工具_屏幕取色器工具
  • HDFS中的Federation联邦机制
  • Spring Boot 单元测试
  • k8s部署nginx访问Tomcat
  • springboot配置文件的使用
  • blender 毛发粒子
  • . 在css中的应用
  • 黑马程序员SpringMVC练手项目
  • SQL注入 ❤ ~~~ 网络空间安全及计算机领域常见英语单词及短语——网络安全(二)
  • 【外卖系统】新增菜品
  • 使用docker搭建GPT服务
  • Qt项目---简单的计算器
  • Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述
  • 基于SpringBoot+Vue的地方美食分享网站设计与实现(源码+LW+部署文档等)
  • 在java中操作redis_Data
  • 嵌入式开发学习(STC51-14-时钟)
  • ES新特性部分
  • 数据结构——搜索二叉树
  • 3.3 Makefile的嵌套包含
  • 爬虫获取电影数据----以沈腾参演电影为例
  • 网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】
  • 2023年华数杯数学建模A题思路代码分析 - 隔热材料的结构优化控制研究
  • 阿里云二级域名配置
  • Webpack5 动态导入按需加载
  • 【Linux操作系统】Ubuntu和center两个Linux发行版本中指令的区别
  • c++基本数据结构
  • 路由器DHCP实验
  • Linux 电源子系统之充电、放电、低功耗
  • 捕捉时刻:将PDF文件中的图像提取为个性化的瑰宝(从pdf提取图像)
  • 【基础类】—HTTP协议类