内存屏障,写屏障和读屏障

目录

jmm:

写屏障和读屏障


jmm:

Java 内存模型(Java Memory Model,简称 JMM)是一种规定了多线程环境中共享变量的访问规则的模型。它确保了在不同线程之间的可见性、有序性和原子性。以下是关于 Java 内存模型的一些关键概念:

  1. 主内存(Main Memory):

    • 主内存是所有线程共享的内存区域,用于存储变量的值。所有线程都可以访问主内存中的变量。
  2. 工作内存(Working Memory):

    • 每个线程都有自己的工作内存,用于存储主内存中的变量的副本。线程只能直接在工作内存中读写变量,不能直接读写主内存。
  3. 读操作和写操作:

    • 当线程需要使用变量的值时,它会从主内存中读取变量的值到自己的工作内存。当线程修改变量的值时,它会先修改自己工作内存中的副本,然后再将修改后的值写回主内存。
  4. 原子性操作:

    • JMM 确保了基本数据类型(如 int 和 long)的读取和赋值操作是原子性的。这意味着在一个线程执行读或写操作期间,其他线程不能中断或看到中间状态。
  5. 可见性:

    • JMM 确保了一个线程对变量的修改对其他线程是可见的。这是通过在写操作时将变量的修改值刷新到主内存,以及在读操作时从主内存重新加载变量的值来实现的。
  6. 有序性:

    • JMM 确保了程序执行的顺序不会受到编译器优化、处理器的乱序执行等因素的影响。通过在指令序列中插入特定的内存屏障来实现有序性。
  7. 内存屏障(Memory Barriers):

    • 内存屏障是指令序列中的一种特殊指令,它能够禁止在屏障之前和之后的指令被重排序。在多线程环境中,内存屏障用于确保执行顺序的一致性。就是我们下面的读屏障和写屏障 0.0

Java 内存模型的设计旨在在多线程环境中提供一致的、可预测的内存访问行为,以确保程序的正确性和稳定性。理解 JMM 对于开发多线程应用程序非常重要,以避免出现并发性问题和线程安全性问题。

写屏障和读屏障

写屏障和读屏障是Java内存模型(JMM)中的概念,用于确保线程之间的内存可见性和指令重排序的一致性。下面我会分别解释它们的作用:

  1. 写屏障(Write Barrier)

    • 写屏障是一个同步操作,确保在写入操作之后,所有的修改都会立即被刷新到主内存中,以确保其他线程能够看到这些修改。
    • 在Java中,volatile变量的写入操作会插入写屏障,这意味着当一个线程写入一个volatile变量时,会立即将所有的修改刷新到主内存中,而不会将写入操作延迟到其他指令之后。
    • 写屏障可以保证写入操作的内存可见性,防止写入操作被重排序到后面的读取操作之前。
  2. 读屏障(Read Barrier)

    • 读屏障是一个同步操作,确保在读取操作之前,所有的数据都是最新的,即从主内存中读取最新的数据,而不是从线程的本地缓存中读取。
    • 在Java中,对volatile变量的读取操作会插入读屏障,这意味着当一个线程读取一个volatile变量时,会从主内存中获取最新的值,而不是使用线程本地缓存中的值。
    • 读屏障可以保证读取操作的内存可见性,防止读取操作将后续的写入操作重排序到前面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP简单的接收和发送

注释 简单的http通讯信息,可以适应简单的场景 void Start(){StartCoroutine(GetRequest("https://jsonplaceholder.typicode.com/posts/1"));StartCoroutine(PostRequest("https://jsonplaceholder.typicode.com","hahah"));}/// &…

【基础算法练习】前缀和与差分模板

文章目录 前缀和算法思想差分算法思想C 版本的前缀和模板一维前缀和二维前缀和 C 版本的差分模板一维差分二维差分 前缀和算法思想 用 O(N) 的复杂度构建前缀和数组,通过这种方式达成 O(1) 的时间来得到区间和,说是一种算法,其实可以说是一种…

何恺明 ResNet 引用量正式破20万!!!

注: 本文转自微信公众号 BravoAI (专注AI资讯和技术分享), 原文网址: 何恺明 ResNet 引用量正式破20万!!!, 扫码关注公众号 谷歌学术显示, 截止到 2024年1月26日, 何凯明 ResNet 一文引用量正式突破 20W!!! 更为惊人的是, 从论文发表到今天, 不过7年!!!‍‍‍‍‍‍‍‍‍‍‍‍…

springboot347基于web的铁路订票管理系统

获取源码——》公主号:计算机专业毕设大全

经典框架解读 | 论文+代码 | 3D Detection | OpenPCDet | PointRCNN

论文标题:PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud 作者单位:The Chinese University of Hong Kong 代码:open-mmlab/OpenPCDet 论文:https://arxiv.org/pdf/1812.0424 第一次使用点云数据处理3D目标检测问题。 作者的观点: 1. 以前的…

预处理详解1❤

一:预定义符号 C语言中设置了一些预定义符号,它们可以直接使用,同时预定义符号是在预处理期间处理的。 以下就是相关的预处理符号的作用。 二:#define定义常量 首先基本的语法是 #define name stuff 相对比较简单&#xff…

Ultraleap 3Di配置以及在 Unity 中使用 Ultraleap 3Di手部跟踪

0 开发需求 1、硬件:Ultraleap 手部追踪相机(Ultraleap 3Di) 2、软件:在计算机上安装Ultraleap Gemini (V5.2) 手部跟踪软件。 3、版本:Unity 2021 LTS 或更高版本 4、Unity XR插件管理:可从软件包管理器窗…

Bagging方法的基本思想

Bagging方法的基本思想实现 在Bagging集成当中,我们并行建立多个弱评估器(通常是决策树,也可以是其他非线性算法),并综合多个弱评估器的结果进行输出。当集成算法目标是回归任务时,集成算法的输出结果是弱…

乖乖,咱不用BeanUtil.copy了,咱试试这款神级工具(超详细)

引言 在现代Java应用程序开发中,处理对象之间的映射是一个常见而且必不可少的任务。随着项目规模的增长,手动编写繁琐的映射代码不仅耗时且容易出错,因此开发者们一直在寻找更高效的解决方案。比如基于Dozer封装的或者Spring自带的BeanUtil.…

AI Infra论文阅读之通过打表得到训练大模型的最佳并行配置

目录 0x0. 前言0x1. 摘要0x2. 介绍0x3. 背景0x4. 实验设置0x5. 高效的LLM训练分析0x5.1 Fused Kernels 和 Flash Attention0x5.1.1 Attention0x5.1.2 RMSNorm Kernel 0x5.2 Activation Checkpointing0x5.3 Micro-Batch 大小0x5.4 Tensor Parallelism和Pipline Parallelism0x5.5…

幻兽帕鲁服务器一键搭建脚本

前言 幻兽帕鲁刚上线就百万在线人数。官方服务器的又经常不稳定。所以这里给大家带来最快捷的搭建教程。废话不多说直接开始。 服务器配置要求 这里推荐腾讯云的轻量云服务器 测试环境: CPU : 2核 内存:4GB 系统:Debian 12 64…

二叉树的先序,中序,后序遍历

二分搜索树&#xff1a; 不了解的可以看这&#xff1a; 二分搜索树(Java&#xff09;-CSDN博客 中序遍历&#xff1a; public List<Integer> inorderTraversal(TreeNode root) {List<Integer>listnew ArrayList<>();midPai(root,list);return list;}publi…

leetcode:二叉树的中序遍历(外加先序,后序遍历)

题外&#xff1a;另外三种遍历可以看这&#xff1a; 层序遍历&#xff1a; Leetcode:二分搜索树层次遍历-CSDN博客 先序遍历&#xff1a; 二叉树的先序&#xff0c;中序&#xff0c;后序遍历-CSDN博客 后序遍历&#xff1a; 二叉树的先序&#xff0c;中序&#xff0c;后序…

鸿蒙开发(Harmonyos兼容与Harmonyos适配)

布局的实现 Layout_ability_main.xml布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.com/res/ohos"ohos:height"match_parent"ohos:width"match_pare…

测试人员为什么要编写测试用例?好的测试用例应该具备那些特点?

设计测试用例可以说是测试人员的一项最基本技能 。很多时候当我们接到设计测试用例的任务时 &#xff0c;往往都是想的该如何更快的完成这项任务 &#xff1f;而很少去想为什么要完成这项任务? 对于测试用例也是如此&#xff0c;为什么要设计测试用例呢(目的)&#xff1f;其实…

Jellyfin影音服务本地部署并结合内网穿透实现公网访问本地资源

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

拼图小游戏的界面和菜单的搭建

package Puzzlegame.com.wxj.ui;import javax.swing.*;public class GameJframe extends JFrame { //游戏主界面 public GameJframe(){//初始化界面initJFrame();//初始化菜单initJmenuBar();//让界面显示出来this.setVisible(true); }private void initJmenuBar() {//创建整个…

需求变化频繁的情况下,如何实施自动化测试

一.通常来说&#xff0c;具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁&#xff0c;那么测试人员就需要根据变动的需求来不断地更新自动化测试用例&#xff0c;从而适应新的功能。…

qiankun子应用静态资源404问题有效解决(涉及 css文件引用图片、svg图片无法转换成 base64等问题)

在&#x1f449;&#x1f3fb; qiankun微前端部署&#x1f448;&#x1f3fb;这个部署方式的前提下&#xff0c;遇到的问题并解决问题的过程 最开始的问题现象 通过http请求本地的静态json文件404css中部分引入的图片无法显示 最开始的解决方式 在&#x1f449;&#x1f3…

行测-言语:2.语句表达

行测-言语&#xff1a;2.语句表达 1. 语句排序题 捆绑就是看两句话是不是讲的同一个内容&#xff0c;相同内容的句子应该相连。 1.1 确定首句 1.1.1 下定义&#xff08;……就是 / 是指&#xff09; A 1.1.2 背景引入&#xff08;随着、近年来、在……大背景 / 环境下&#…