共享变量的过时值

2023-12-15

在阅读实践中的并发性时,我读到:

NoVisibility展示了一种不充分的方法 同步程序可能会导致令人惊讶的结果:陈旧的数据。当。。。的时候 读者线程检查ready,它可能会看到一个过时的值。除非 每次访问变量时都会使用同步,这是 可能会看到该变量的过时值。更糟糕的是,陈旧性是 不是全部或全无:线程可以看到一个变量的最新值 但首先写入的另一个变量的陈旧值。

public class NoVisibility {
    private static boolean ready;
    private static int number;

    private static class ReaderThread extends Thread {
        public void run() {
            while (!ready)
                Thread.yield();
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}

我不明白陈旧的含义。两个线程共享相同的引用,一个线程修改的值如何对其他线程可见或不可见?


每个线程都有它的自己的堆栈,所以它可以有自己的变量副本 使用权。当线程创建时,它会复制所有的值 可以在自己的内存中访问变量。使用了 volatile 关键字 对 jvm 说“警告,该变量可能会在其他变量中被修改 线“。如果没有这个关键字,JVM 可以自由地做出一些 优化,例如永远不会让人耳目一新一些本地副本 线程。易失性强制线程更新原始变量 对于每个变量。

Source DZone

硬件实现

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

共享变量的过时值 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 如何强制jar使用(或jar运行的jvm)utf-8而不是系统的默认编码

    我的Windows默认编码是GBK 而我的Eclipse完全是utf 8编码 因此 在我的 Eclipse 中运行良好的应用程序崩溃了 因为导出为 jar 文件时这些单词变得不可读 我必须在 bat 文件中写入以下行才能运行该应用程序 st
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 每个客户端一个线程与线程服务器的排队线程模型之间的相对优点?

    假设我们正在构建一个线程服务器 旨在在具有四个核心的系统上运行 我能想到的两种线程管理方案是每个客户端连接一个线程和一个排队系统 正如第一个系统的名称所暗示的那样 我们将为每个连接到服务器的客户端生成一个线程 假设一个线程始终专用于程序的主
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常

随机推荐

  • jqGrid添加项目复选框字段默认为选中

    这是一个简单的问题 我有一个运行良好的 jqGrid 但我想设置一个复选框的默认值 以便在用户添加新项目时进行检查 这是一段代码 name Active index active width 80 align center sortable
  • Symfony 4、如何实现通用控制器即服务?

    我有这个控制器 Controller1 php
  • 如何使用applescript以编程方式获取最新下载的文件名?

    我需要在 Mac 上以编程方式获取文件名 我使用 Selenium 下载文件 并从下载文件夹中选择相同的文件以编程方式安装 我使用 Applescript 执行相同的操作 我被困在运行时获取文件名 而且我的下载页面 url 不包含下载文件的
  • dart FFI 中“char*”的“本机类型”是什么?

    我有一个这样的功能C语言 char getString return SOME STRING 现在我想通过调用它FFI in dart 这是我的代码 import dart io import dart ffi void main List
  • 为什么Java接口可以在这些代码中实例化呢? [复制]

    这个问题在这里已经有答案了 可能的重复 创建接口的 对象 我是 Java 新手 根据我的理解 我们无法实例化一个Interface 我们只能实例化一个class它实现了一个interface The new关键字用于从类创建对象 但是 当我
  • SceneKit:内存过多

    我已经没有想法了 SceneKit 正在堆积内存 而我才刚刚开始 我正在显示SNCNodes它们存储在数组中 这样我就可以分离分子的组成部分以进行动画 这些树模型分子我最终可能会展示 50 个 比如说每 章 一个 问题是 当我转到另一章时
  • 与“PropTypes.element”相对应的“defaultProp”的正确值是什么?

    我有一个组件 我希望接受另一个组件作为道具 并渲染它 我希望传递的组件是可选的 并且在这种情况下不渲染任何内容 下面的代码可以完美运行 const Component Inner gt div div
  • 有没有办法生成单元测试来测试我的语法

    我使用 antlr4 创建了语法 但我想测试稳健性有没有自动工具或快速完成此操作的好方法 谢谢 由于很难找到 ANTLR 的真正单元测试 我写了两篇关于它的文章 Lexer 的单元测试 解析器的单元测试 A 词法分析测试检查给定文本是否被读
  • 如何使 ImageButtons 边界环绕图像?

    我正在为 Android 应用程序制作 GUI 该 GUI 包含四个方向ImageButtons 看下图 但是当试图做到这一点时总是失败 因为为每个图像保留了一个正方形 这就是我所达到的 那是我的XML code
  • 我现在可以将使用 WatchKit 的应用程序上传到 App Store 吗?

    我制作了一个应用程序 包括一个iOS应用程序和一个WatchKit应用程序 每个部分都可以独立运行 我现在可以将此应用程序上传到 App Store 以便在发布时可以在 Apple Watch 上使用吗 还是必须等待 如果答案是肯定的 我是
  • 如何将 CreateObject("Wscript.shell") 转换为 C# [重复]

    这个问题在这里已经有答案了 我怎样才能用 C 翻译这个 Set WshShell WScript CreateObject WScript Shell 谢谢 这个用在什么场合呢 还有我必须在 C 中包含什么库才能工作 使用用于脚本编写的 S
  • 如何在 iPhone 的图像上添加文字?

    我需要在 iPhone 中将文本放在图像上 它就像 Eurosport iPhone 应用程序 source mzstatic com 以同样的方式 我需要在我的应用程序中添加文本 我怎样才能做到这一点 Thanks 我找到了两种方法 1
  • 我可以使用 WinApi Deploy Cmd 在电脑上安装、更新吗

    我的 appx 文件安装在文件夹中 我可以通过双击该文件来安装它 但我正在寻找一种使用 WinAppDeployCmd 进行安装和更新过程来安装它的方法 WinAppDeployCmd install file C release file
  • Hadoop:JPS 找不到已安装的 Java

    我的配置是 hduser worker1 usr local hadoop conf jps The program jps can be found in the following packages openjdk 6 jdk open
  • 如何使用外部 JSON...?

    花了几个小时试图解决这个问题 但我无法弄清楚出了什么问题 我想做的就是加载这个 https recruit zoho com ats EmbedResult hr jodigest 2cV Sr2As6VxhLMxQGuTNij g Fb3
  • 通过 cron 执行的 Google Cloud SDK 代码

    我正在尝试实现一个自动代码来通过 Crontab 关闭和启动我的 Google Cloud 帐户中的 VM 实例 操作系统是 Ubuntu 12 lts 并安装了 Google 服务帐户 因此它可以处理我的 Google 云帐户上的读 写
  • 如何使用tensorflow进行文本分类?

    我是张量流和机器学习的新手 我在编写张量流代码时遇到问题 该代码的文本分类类似于我尝试使用 sklearn 库进行的文本分类 我在对数据集进行矢量化并向张量流层提供输入方面面临着重大问题 我确实记得对标签进行了一次热编码 但前面的张量流层不
  • Twitter 模块 python 'module' 对象没有属性 Oauth

    我正在尝试遵循这个基本示例here Code import twitter XXX Go to http dev twitter com apps new to create an app and get values for these
  • 随机化神经网络输入顺序的影响

    在我的高级算法和数据结构课程中 我的教授要求我们选择任何我们感兴趣的主题 他还告诉我们要研究它并尝试实施解决方案 我选择神经网络是因为它是我长期以来想学习的东西 我已经能够使用神经网络实现 AND OR 和 XOR 该神经网络的神经元使用阶
  • 共享变量的过时值

    在阅读实践中的并发性时 我读到 NoVisibility展示了一种不充分的方法 同步程序可能会导致令人惊讶的结果 陈旧的数据 当 的时候 读者线程检查ready 它可能会看到一个过时的值 除非 每次访问变量时都会使用同步 这是 可能会看到该