Java内存模型中的Happens-Before关系

2023-11-24

关于 JLS ch17线程和锁,它表示“如果一个操作发生在另一个操作之前,则第一个操作对第二个操作可见并且在第二个操作之前排序”;我想知道:

(1)“之前订购”到底是什么意思?因为即使action_a发生在action_b之前,在某些实现中action_a也可以在action_b之后执行,对吗?

(2) 如果action_a发生在action_b之前,是否意味着action_a不能看到action_b?或者action_a可能看到也可能看不到action_b?

(3) 如果action_a不发生在action_b之前,并且action_b也不发生在action_a之前,这是否意味着action_a可以看到或不可以看到action_b?

(4) 不可能有任何循环的happens-before,对吧?

任何答案将不胜感激:)


(1)“之前订购”到底是什么意思?因为即使action_a发生在action_b之前,在某些实现中action_a也可以在action_b之后执行,对吗?

发生在之前 is a causal, not a temporal关系。action_a之前是因果顺序的action_b,无论它是否实际上在它之前执行。然而,在实践中,如果没有时间顺序,运行时将很难维持因果关系。查看我之前的问题其中详细介绍了因果关系的主题。

(2) 如果action_a发生在action_b之前,是否意味着action_a不能看到action_b?或者action_a可能看到也可能看不到action_b?

动作之间的可见性有一个明确的总体顺序。这是由指定的部分处理的格式良好的执行。因此,对于任意两个动作a and b, 任何一个a可见b, or b to a,或者以上都不是。理解格式正确的执行概念的好书是Java 内存模型示例:好、坏和丑陋.

(3) 如果action_a不发生在action_b之前,并且action_b也不发生在action_a之前,这是否意味着action_a可以看到或不可以看到action_b?

是的,两者皆有可能。无论哪种方式都没有保证。

(4) 不可能有任何循环的happens-before,对吧?

发生在之前必须强制执行部分排序,而排序的关键属性是没有循环。

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

Java内存模型中的Happens-Before关系 的相关文章

  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 未找到 MessageSource 的 ResourceBundle [消息]:找不到基本名称消息的包

    在 applicationContext xml 中 我定义了 MessageSource 如下所示
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • jQuery 按数据属性中的日期排序

    如果我有这个标记 p item 1 p p item 1 p p item 1 p 我如何使用 jQuery 按数据日期属性对这些 P 进行排序 Thanks Demo 非常简单的数组排序 p sort function a b retur
  • 扩展 Control 以提供一致安全的 Invoke/BeginInvoke 功能是否合适?

    在我维护一个严重违反 winforms 中跨线程更新规则的旧应用程序的过程中 我创建了以下扩展方法 作为在发现非法调用时快速修复它们的方法
  • 捕获 asyncio.ensure_future 中的错误

    我有这个代码 try asyncio ensure future data streamer sendByLatest except ValueError as e logging debug repr e data streamer se
  • 在Python中解析多部分请求字符串

    我有一个像这样的字符串 5b34210d81fb44c5a0fdc1a1e5ce42c3 r nContent Disposition form data name author r n r nJohn Smith r n 5b34210d
  • 更改四开 PDF 输出中的标题/标题字体

    当RMarkdown rmd文档被编织为 PDF 文本正文以及标题 副标题和标题均以相同的 LaTeX 标准字体呈现 渲染四开时 qmd文档为 PDF 时 文本正文的字体保持不变 但标题 副标题和标题以不同的字体呈现 没有衬线 为了实现较旧
  • 与 Integer.MAX_VALUE 相比并使用 System.out.println 时 for 循环提前终止

    当我运行这个类时 for 循环似乎提前终止 class Test public static void main String args int result 0 int end Integer MAX VALUE int i for i
  • 如何从div中删除最后一个元素?

    我有描述列表 删除其中一个后 我想从 div 中删除最后一个元素 而不是刷新站点 事实上我不懂javascript 所以我想问一下我的destroy js erb应该是什么样子 我可以使用刷新整个班级的 描述 descriptions lo
  • Actionscript:图像到base64字符串可能吗?

    是否可以将选定的图像转换为 Base64 编码的字符串 对于图像上传器来说 这将是一个很好且简单的解决方案 谢谢 如果您想对加载图像的 byteArray 进行编码 您可以使用 mx utils 中的 Base64Encoder 类Base
  • 如何在 Selenium + Python 中查找损坏的链接

    我试图在 Selenium 和 Python 中找到损坏的链接 但在代码中出现错误 import requests from selenium import webdriver chrome driver path D drivers ch
  • 将 iPad 内容输出到外部显示器

    我听说可以将 iPad 应用程序的内容输出到外部显示器 但应用程序必须为此做好准备 并且存在严重的限制 有什么指点吗 另外 iPhone 也能做到这一点吗 是一样的吗 几乎没有表明 您需要创建一个新的 UIWindow 并将其附加到 UIS
  • 下划线方法前缀

    我一直在检查 CodeIgniter 和 CakePHP 的代码 我注意到它们类中的一些方法带有下划线前缀 或双下划线 这样做的目的是什么 如果不是以下任一情况PHP 魔法方法 是为了表示能见度缺乏适当的可见性关键字 蛋糕编码约定 由于我们
  • 更改fiddler代理服务器的用户名和密码[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在使用 Fiddler 设置代理服务器 但在规则菜单下启用 需要代理授权 时 用户名 密码始终为 1 如何更改用户名 密码 我尝试更改 oSession X AutoAuth 用
  • 如何读取3gp / AMR-NB音频格式的原始值?

    在我的 Android 应用程序中 我正在录制用户的声音 并将其保存为 3gp 编码的音频文件 我想做的就是打开它 即代表音频样本的序列 x n 以便执行一些音频信号分析 有谁知道我该怎么做 您可以使用安卓媒体编解码器解码 3gp 或其他媒
  • Android 中的 Button 类膨胀错误

    我有一个最小 sdk 16 到 23 的应用程序 我想尽可能多地使用 Material design 它还必须是全屏应用程序 包含 AppCompat 支持库 现在我有一些按钮的登录活动
  • 如何自动更新 Windows Mobile 应用程序

    我有一个 net cf 3 5 Windows Mobile 应用程序 我的客户希望它具有自动更新功能 这是我到目前为止所拥有的 使用智能设备 CAB 项目创建 CAB 这是否足够好 或者我应该在这里做其他事情 2 获取应用程序版本号 As
  • iOS - 关闭作为 inputView 呈现的 UIDatePicker

    我的 UI 中有一个文本字段 当选择它时会显示 UIDatePicker 而不是默认键盘 我如何设置一个按钮以便在用户完成后关闭选择器 我所做的是将我的 inputView 作为自定义视图 其中包含UIDatePicker其上方有一个工具栏
  • $this->load->model() 在 CodeIgniter 中不起作用

    我正在使用 CodeIgniter 2 1 2 这是我现在的情况 我有一个名为 math php 的模型C wamp www cr8v application models 我正在尝试将其加载到我的控制器中C wamp www cr8v a
  • Ajax文件下载问题

    我正在我的应用程序中下载动态文件 使用 iframe 模拟 ajax 我正在做的是 当发出下载请求时 我将创建一个动态的不可见 iframe 并将 iframe 的 src 设置为下载网址 我能够成功下载文件 但要求是显示下载一旦下载开始
  • jQuery 1.10.1 在选择上设置不存在的值

    有人可以解释一下这种行为
  • Java内存模型中的Happens-Before关系

    关于 JLS ch17线程和锁 它表示 如果一个操作发生在另一个操作之前 则第一个操作对第二个操作可见并且在第二个操作之前排序 我想知道 1 之前订购 到底是什么意思 因为即使action a发生在action b之前 在某些实现中acti