有效的重新排序 - 根据新的 JMM

2023-12-31

我只是想知道以下重新排序在新的 JMM 模型下是否有效

Original Code: 
     instanceVar1 = value ;//  normal read operation, no volatile
     synchronized(this) {
       instanceVar2 = value2; //normal read operation, no volatile   
     }
     instanceVar3 = value3;  //normal read operation, no volatile

上面的代码可以重新排序为以下执行。

Case 1:

     synchronized(this) {
       instanceVar2 = value2; //normal read operation, no volatile   
       instanceVar1 = value ;//  normal read operation, no volatile
     }
     instanceVar3 = value3;  //normal read operation, no volatile

另一个案例:

Case 2:

  synchronized(this) {
       instanceVar3 = value3;  //normal read operation, no volatile
       instanceVar2 = value2; //normal read operation, no volatile   
       instanceVar1 = value ;//  normal read operation, no volatile
     }

另一个案例:

Case 3: 

    instanceVar3 = value3;  //normal read operation, no volatile
    synchronized(this) {
       instanceVar2 = value2; //normal read operation, no volatile   
       instanceVar1 = value ;//  normal read operation, no volatile
     }

另一个案例:

Case 4: 

    instanceVar3 = value3;  //normal read operation, no volatile
    synchronized(this) {
       instanceVar2 = value2; //normal read operation, no volatile   
     }
    instanceVar1 = value ;//  normal read operation, no volatile

上述4种情况是否都是新JMM模型下对原始代码的有效重新排序? 我根据我的理解对以上所有内容进行了重新排序http://gee.cs.oswego.edu/dl/jmm/cookbook.html http://gee.cs.oswego.edu/dl/jmm/cookbook.html


考虑如何通过监视器进入和退出来重新排序正常加载/存储:

情况 1 使用监视器输入重新排序正常加载/存储,这是有效的重新排序。

情况 2 通过监视器进入和监视器退出重新排序正常加载/存储,然后进行正常加载/存储,这是有效的重新排序。

看一个类似的例子:Roach 汽车旅馆和 Java 内存模型 http://jeremymanson.blogspot.co.uk/2007/05/roach-motels-and-java-memory-model.html。这表明访问可以移入同步块,但不能再次退出。

情况 3 和 4 对监视器输入重新排序,然后进行无效的正常加载/存储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效的重新排序 - 根据新的 JMM 的相关文章

  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 在 C# 中创建加密随机数的最快、线程安全的方法?

    请注意 在多个线程上并行生成随机数时 加密随机数生成器不是线程安全的 使用的发电机是RNGCryptoServiceProvider它似乎重复了很长一段随机位 128 位 重现此情况的代码如下所示 缺乏使用锁来保护访问RNGCryptoSe
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 使用 VBScript 自动化应用程序

    我是 VB 脚本编写新手 我希望 VB 脚本根据应用程序的事件进行操作 例如 VBScript 应该等到应用程序中出现弹出消息 VBScript 和 Windows 脚本宿主仅支持原始 GUI 自动化 例如激活窗口 AppActivate
  • 如何存储每个类别对象的总提款金额?

    我有一个Category类 并且该类的每个实例都有一个分类帐属性 该分类帐属性实际上是一个字典列表 其中包含以下形式的取款和存款金额以及描述 amount amount description description 现在 我想定义一个函数
  • 在 Blend 2015 中使用 3D OBJ 文件

    我刚刚开始学习 WPF 3D 并按照教程进行操作 我创建了一个 3D 模型并将其导出为 OBJ 文件 创建一个新的 WPF 项目并添加此 OBJ 文件 我如何在里面使用它Window or Viewport3D 我在 Microsoft 找
  • 便携式图书馆的语言选择

    我想编写一个库 它将与在 Windows Linux 和 OS X 等现代操作系统上运行的其他程序动态链接 即 它将部署为 dll or so模块 在这种情况下最合适的语言是什么 我应该坚持使用纯 C 吗 或者C 也可以吗 您可以使用 C
  • std::lower_bound 和 std::set::lower_bound 之间的差异

    C 草案谈到了 std lower bound 25 4 3 1 lower bound lower bound template
  • 可以在沙箱中运行的 Mini-OSGi(如 AppEngine 或 WebStart)?

    我真的很喜欢 OSGi 实现的模块化捆绑包的概念 我还喜欢 托管部署 服务 例如 Google AppEngine 用于 Web 应用程序 或 Java WebStart 用于客户端软件 这两个想法似乎在概念上很好地互补 然而 OSGi 标
  • 对 Primefaces 中的树节点进行排序

    我正在使用 JSF 2 1 和 Primefaces 3 3 我正在使用 primefaces 树组件从数据库中创建树 我想按字母顺序对各级树节点进行排序 请帮我解决这个问题 我们在排序时遇到了问题Comparator并发现 有一个方便的P
  • 反序列化 XML 时忽略指定的编码

    我正在尝试通过套接字读取从外部接口接收到的一些 XML 问题是 XML 标头中指定的编码错误 显示为 iso 8859 1 但实际上是 utf 16BE 据记录编码是utf 16BE 但显然他们忘记设置正确的编码 为了在反序列化时忽略编码
  • Node.js HTTP 客户端中的自动 UTF-8 编码

    我尝试使用 Node js 从远程主机加载 XML 内容 问题是像 这样的德语 元音变音 被破坏了 就像在浏览器中一样 这通常是一个简单的编码问题 但由于远程主机上的 XML 内容是用 iso 8859 2 编码的 所以我没有成功让这些字母
  • 消息:插入动态输入字段数据时未初始化的字符串偏移量:0

    我正在使用 CodeIgniter 我得到了动态选择框 从第二个选择框中 用户可以选择状态并根据状态输入字段进行显示 检查下面的屏幕截图 如果用户单击Add More然后将显示下面的选择框 现在从第二个选择框中 我选择Status one因
  • 如何使用 Symfony 表达式语言在 @Security 注释中使用类常量?

    我正在使用 Symfony 3 并且创建了一个自定义 Voter 类 我想使用访问它SensioFrameworkExtraBundle https symfony com doc current bundles SensioFramewo
  • 对重载new和delete施加限制

    是否可以对重载运算符 new 和 delete 施加一些限制 我的重载 new 在另一个文件中链接到我的测试程序 场景是 if condition is satisfied call overloaded new else call the
  • 如何在android中卸载应用程序时清除数据库

    我使用数据库来存储消息 如果我卸载我的应用程序并再次重新安装相同的应用程序 数据库保持不变 但我想清除我的数据库 如何解决这个问题 要监听卸载事件 您必须实现收到的广播 例如
  • 在条件表达式中声明变量(三元运算符)

    是否可以在条件表达式中声明变量 例如 下面的代码返回语法错误 因为我已经在条件表达式中声明了变量 x var a document getElementById userData var d a value function d lengt
  • 在 Vue.js 中构建期间传递要由 .env.[mode] 文件使用的参数(命令行)

    Goal 传递一个在构建时使用的参数 以便能够在我的 env Production 文件中使用它 或者如果不可能的话 可以让我将它用作环境变量 env 生产文件 VUE APP CLIENT ID 00 should be using wh
  • 计算一行中 NULL 属性的数量

    我想在表中添加一个新列来记录每个元组 行 值为空的属性的数量 如何使用 SQL 获取号码 例如 如果一个元组是这样的 Name Age Sex Blice 100 null 我想更新元组如下 Name Age Sex nNULL Blice
  • EclipseLink 审核/历史记录/跟踪更改

    我尝试实现一种跟踪数据更改并为我的应用程序创建历史日志的方法 因为我正在使用 EclipseLink 所以应该很容易并且可以像它们一样获得更改写在 EclipseLink FAQ 上 http wiki eclipse org Eclips
  • 数组作为类的私有成员

    我正在尝试创建一个具有私有成员 数组 的类 我不知道数组的大小 直到将值传递到构造函数中才知道 定义类构造函数以及 h 文件中的定义以允许数组大小可变的最佳方法是什么 如果你想要一个 真正的 C 风格数组 你必须向你的类添加一个指针私有成员
  • 为什么此代码在 Xcode 模拟器上有效,但在设备上不起作用?

    我真的希望有人向我解释一下 我正在编写一个使用其设备 MAC 地址的应用程序 并且此代码在模拟器上完美运行 但在设备上不起作用 我从问题中得到了这个代码在 Objective C 中获取路由器 mac 无需系统调用 ARP https st
  • 有效的重新排序 - 根据新的 JMM

    我只是想知道以下重新排序在新的 JMM 模型下是否有效 Original Code instanceVar1 value normal read operation no volatile synchronized this instanc