Java 不稳定的并发性

2023-12-02

好的,我刚刚读了这个问题你在 Java 中使用过 volatile 关键字吗?,并且我使用易失性变量来停止循环。我也看过这个参考资料,http://www.javamex.com/tutorials/synchronization_volatile.shtml。现在文章说易失性变量是非阻塞的。它还表示它不能用于读取-更新-写入序列中的并发。这是有道理的,因为它们是非阻塞的。

由于易失性变量永远不会被缓存,因此简单地使用同步来停止循环(来自前面的链接)是否更快?

编辑:使用同步解决方案

public class A{
  private boolean test;

  public A(){
    test = true;
  }

  public synchronized void stop(){
    test = false;
  }

  public synchronized boolean isTrue(){
    return test;
  }
}

public class B extends Thread {
  private A a;

  public B(A refA){
    a = refA;
  }

  public void run(){
    //Does stuff here
    try{
      sleep(1000);
    }
    catch(Exception e){}
    a.stop();
  }

  public static void main(String [] args){
    A TestA = new A();
    B TestB = new B(TestA);
    TestB.start();
    while(TestA.isTrue()){
      //stay in loop
      System.out.println("still in loop");
    }
    System.out.println("Done with loop");
  }
 }

不,读一volatile变量比读取非变量更快volatile中的变量synchronized block.

A synchronized块清除条目上的缓存值,这与读取相同volatile多变的。But,当退出同步块时,它还会将所有缓存的写入刷新到主内存,这在读取时是不必要的volatile多变的。

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

Java 不稳定的并发性 的相关文章

随机推荐

  • ServerCertificateCustomValidationCallback 自定义异常

    我想通过 HttpClientHandler 的 ServerCertificateCustomValidationCallback 属性进行自定义证书验证 但是 提供的回调只能返回 true 对于有效证书 或 false 对于无效证书 如
  • 如何在仅某些条件为 TRUE 的数组公式中包含 OR - Excel 第 2 部分

    这是这个的延伸question 回答者是XOR LX 在最初的问题中 我想计算矩阵中包含满足条件的值的行数最后一个特定于列的标准 引用的列是连续的 例如 A1 D4 但这种情况需要对不连续的列进行索引 取数据矩阵 A B C D E F G
  • 将当前Git分支设为master分支

    我在 Git 中有一个存储库 我创建了一个分支 然后对主分支和分支进行了一些更改 然后 数十次提交后 我意识到分支的状态比主分支好得多 所以我希望分支 成为 主分支并忽略主分支上的更改 我无法合并它 因为我不想将更改保留在 master 上
  • 在纯 JavaScript 中实现 setTimeout() 和 setInterval()

    我有一些支持在浏览器上运行的 JavaScript 基准测试代码 但我想在 JavaScript 引擎的控制台模式下运行它 例如 V8 中的 d8 以进行测试 我为每个 DOM 变量和函数编写了空变量和函数 例如document getEl
  • CSV 文件的 Blob 字符集

    我想使用 blob 创建一个 CSV 文件 该文件应该以 ANSI 编码 但它不起作用 var blob new Blob ufeff csvFile type text csv charset windows 1252 该文件始终使用 U
  • 什么是 zip(函数式编程?)

    我最近看到了一些 Clojure 或 Scala 抱歉我对它们不熟悉 它们确实压缩了一个列表或类似的东西 什么是 zip 它来自哪里 Zip 是指采用两个输入序列并生成一个输出序列 其中使用某个函数将输入序列中同一位置的每两个元素组合起来
  • 如何计算该程序在Python中执行了多少次?

    from itertools import permutations import random import pprint import timeit start time timeit default timer count 0 def
  • 我可以使用 Zoom.translateBy 设置初始平移吗?

    我有类似的东西 zoomable call d3 zoom scaleExtent 1 Infinity translateExtent 0 0 width height on zoom handleZoom 我似乎无法直接在缩放行为上调用
  • 使用 htmlspecialchars 函数与 PDO 准备和执行

    正在使用 PHP PDO 在表单验证和数据库查询中将特殊字符转换为 HTML 实体htmlspecialchars 功能真的有必要吗 例如 我有一个带有简单登录系统的网站 或多或少类似于 username string htmlspecia
  • 是否可以在量角器调试配置(WebStorm)中指定参数

    I m using Protractor in Webstorm and in order to use parameters in the terminal I can do protractor params url http www
  • 使用 Json.NET 序列化对象列表

    我有一个如下的对象模型 将从数据库检索的数据绑定到该模型 public class Student public virtual string serialNumber set get public virtual string stude
  • Visual Studio 代码:Paperscript

    抱歉我的英语水平 你知道任何扩展或其他东西来给 paperscript 代码着色吗 paperscript 色差示例 因为你的编辑器不认识text paperscriptMIMEtype 它不知道要应用什么语法突出显示 为了避免这种情况 最
  • 描述 Assembly 中的 pop [重复]

    这个问题在这里已经有答案了 我正在学习IA32 当我思考什么时popl DEST我认为指令正在做以下事情 movl esp DEST addl 4 esp 但当我想到popl esp 尽管这可能是一个毫无意义的指令 但我认为可能有更好的方法
  • 如何打印嵌入空值的字符串,以便用“(null)”替换“\0”

    我有一个使用 memcpy 组成的字符串 展开时 如下所示 char str AAAA x00 x00 x00 x11 x11 x11 x11 x00 x00 我想打印字符串中的每个字符 如果该字符为空 则打印出来 null 作为 0 的替
  • 带有全选复选框的可扩展列表视图:组项目单击和滚动错误

    我有一个 ExpandableListView 组名称旁边有一个复选框 展开时 子项目也带有复选框 假设我有 4 个组 有 50 个孩子 当展开一个组时 我单击全选复选框 一切正常 所有复选框都被选中 并在滚动时保持其状态 但是 如果我滚动
  • “ 远程服务器返回错误:(401) 未经授权”

    我正在尝试验证我的网址是否得到响应 换句话说 我正在尝试检查该网站的身份验证是否已成功 I used HTTP Request System Net WebRequest Create http example com HTTP Respo
  • 如何在 404 Tomcat 上重定向到外部网站

    我使用的是 spring 3 Tomcat 7 In web xml我已经定义了
  • TFS 构建定义未将 mvc 应用程序部署到 IIS

    我正在尝试使用 Visual Studio 的团队资源管理器和 TFS 创建构建定义以将 MVC 站点部署到 IIS 我遵循了名为 Team Foundation Server 2010 的持续部署 的 Pluralsight 教程 我从本
  • 使用 Java 从麦克风传输音频

    我正在开发一个项目 需要我将音频从客户端的麦克风流式传输到服务器 下面显示的代码是我写的 当我同时运行客户端和服务器代码时 音频不会实时传输 事实上 来自客户端的音频存储在缓冲区中 当我终止客户端代码的执行时 来自服务器缓冲区的音频将输出到
  • Java 不稳定的并发性

    好的 我刚刚读了这个问题你在 Java 中使用过 volatile 关键字吗 并且我使用易失性变量来停止循环 我也看过这个参考资料 http www javamex com tutorials synchronization volatil