如何围绕未正确发布的值演示竞争条件?

2024-04-05

我正在阅读《Java 并发实践》并查看第 51 页的示例代码。

根据该书,这段代码如果没有正确发布,就有失败的风险。因为我喜欢编写示例代码并分解它们以证明它们是如何工作的。我尝试让它抛出 AssertionError 但失败了。 (引导我走向我的上一个问题 https://stackoverflow.com/questions/2614066/java-concurrency-in-practice-sample-question)

任何人都可以发布示例代码以便抛出 AssertionError 吗?规则:不要修改 Holder 类。

public class Holder{
    private int n;

    public Holder(int n){
        this.n = n;
    }

    public void assertSanity(){
        if (n != n) {
            throw new AssertionError("This statement is false");
        }
    }
}

我已经修改了该类以使其更加脆弱,但我仍然无法抛出 AssertionError 。

class Holder2 {
    private int n;
    private int n2;

    public Holder2(int n) throws InterruptedException{
        this.n = n;
        Thread.sleep(200);
        this.n2 = n;
    }

    public void assertSanity(){
        if (n != n2) {
            throw new AssertionError("This statement is false");
        }
    }
}

是否有可能使上述任何一个类抛出 AssertionError ?或者我们是否必须接受他们偶尔会这样做而我们无法编写代码来证明这一点?


我会在多处理器机器上运行几个小时,看看会发生什么(如果您使用 Holder2,请删除睡眠)。这种竞争条件可能很少见,或者在您的特定机器上不存在 - 但至少尝试通过尝试数百万次来在一百万个案例中引发这些竞争条件。

class Checker {
  private Holder h;
  public Checker() {
   h = new Holder(42);
  }

  public void check() {
    h.assertSanity();
  }

  public void create(int n) {
   h = new Holder(n);
   }

}

public class MyThread extends thread{
  private bool check;
  private final Checker c;
  public MyThread(bool check,Checker c) {
    this.check = check;
    this.c = c;
  }
    public static void main(String[] args) {
      Checker c = new Checker();
      MyThread t1 = new MyThread(false,c);  
      MyThread t2 = new MyThread(true,c);
      t1.start();
      t2.start();
      t1.join();
      t2.join();
   }
   public void run() {
     int n = 0;
     while(true) {
       if(check) 
         c.check();
       else
         c.create(n++);
    }
   }
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何围绕未正确发布的值演示竞争条件? 的相关文章

  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • Phonegap 页面旋转错误,在横向模式下显示为纵向

    我有一个 简单的 网页打包在phonegap 应用程序中 如果我启动应用程序 它会以纵向显示页面 横向页面宽度 所以文本从左下到左上开始 右侧有一个空白 页面应该在此处结束 这是我所看到的 在我的中支持的方向是横向左和右 Info plis
  • 是否可以使用 XSLT 跳过层次结构中的级别?

    层次结构采用 XML 格式 我使用 XSLT 来转换数据 例如 如果层次结构有 4 个级别 并且我想跳过中间的一个级别 例如第 3 级 Level 1 Level 2 Level 3 Skip this level Level 4 Leve
  • 仅使用 CSS 的最大高度和最大宽度

    我的第一篇文章在这里 我使用 div 以相同的比例 180wx170h 裁剪缩略图 在处理肖像和风景图像时 我陷入了困境 如果我使用它 这对于肖像风格的图像来说很好 crop img max height 170px width auto
  • 为 C# 应用程序制作安装程序并将 .NET Framework 安装程序包含到安装程序中

    我已经完成了 C 应用程序 但有一个小问题 当我尝试在另一台 PC 上运行应用程序时 我始终需要安装 NET Framework 4 0 有什么办法可以使其工作而无需从互联网安装框架吗 我之前尝试过创新设置 http www jrsoftw
  • JVM跳转指令的偏移量怎么会是32768呢?

    在写一个回答有关 JVM 字节码偏移量的问题 https stackoverflow com a 30240357 3182664 我注意到 javac 的行为和生成的类文件中有一些我无法解释的内容 当编译这样的类时 class FarJu
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么?

    场景是我有很多 FieldRenderer 这些应该从不同的地方输出数据 一些来自项目 X 另一些来自项目 Y 并且应该输出项目 Z 的属性 假设我有公共财产ItemX我想从中输出一个属性 以下任何一个都可以 但我没有得到他们中任何一个的输
  • Angular2 路由 - 当路由更改时保持组件的状态[重复]

    这个问题在这里已经有答案了 我有一个应用程序 其视图位于路由后面 我需要能够从路由更改时的位置继续 但返回后 组件处于初始状态 有什么办法可以保持组件的状态吗 update 2 现在已针对新路由器修复了这个问题 Angular 2 3 ht
  • 如何在 MATLAB 中随机排列 3D 矩阵中的列

    我有 3D 矩阵 10000 x 60 x 20 我需要排列第二维和第三维以保持列完整 对于 2D 矩阵 我使用 RANDPERM pidx randperm size A 2 Aperm A pidx 我不能只应用 RANDPERM 两次
  • 如何在表中表示 nil

    假设我想存储一个元素列表 包括一些零值 值的位置很重要 我需要表示列表中给定位置处不存在值 这里有一个问题 a 1 2 3 nil 4 for k v in ipairs a do print k v end print a 4 print
  • html中的方括号是什么意思?

    我现在正在协助一个项目 第一次构建模板 试图解决一些问题 但 html 中令我困惑的一个方面是方括号中的某些内容 我以前从未在 html 中使用过这些 所以我只是想知道它们的用途 当我在浏览器中打开页面时 它们都显示为文本 这是一些代码 d
  • Excel - 多项选择下拉列表 - 不重复选择

    我在 Excel 电子表格上开发了可以使用以下代码在下拉列表中选择多个项目的方法 Private Sub Worksheet Change ByVal Target As Range Dim rngDV As Range Dim oldVa
  • 如何使用 CakePHP APP 类从 URL 加载 XML 文件?

    我正在使用 CakePHP XmlHelper 来解析 XML 文件 例如 App import Xml file my xml file xml parsed xml new XML file 我如何使用它从 URL 加载 XML 文件
  • MySQL 日期比较过滤器

    我有一些运行良好的 SQL 代码 并从我的 Wordpress 数据库返回所需的结果 但是 我根本无法理解如何过滤以下日期之间的日期 2010 12 10 00 00 00 and 2010 12 15 00 00 00 这是我的 SQL
  • 如何使用 ffmpeg-python 在视频上叠加帧序列?

    我在下面尝试过 但它只显示背景视频 background video ffmpeg input input mp4 overlay video ffmpeg input f frames folder png pattern type gl
  • 跳过多个号码

    我正在尝试将正则表达式用于我正在做的工作项目 我有一组数字 如下所示 23 14 62 121 98 0 0 0 1 0 0 0 2 165 60 00 24 13 64 118 101 0 0 0 1 0 0 0 2 165 60 00
  • VBA更改模块中的实例变量(excel)

    在 VBA 中 我需要一个模块 sub 来告诉实例设置一些变量 在模块 1 中我有 Sub Load ThisWorkbook SetupVariables ThisWorkbook TestVariables End Sub 在本工作簿中
  • 在Windows下使用通过MSYS2安装的cmake 3.5.2,缺少“MinGW Makefiles”生成器

    我正在尝试使用 MinGW 作为编译器 在 Windows 下进行 hello world 测试来制作 cmake 这个答案 https stackoverflow com a 4101496 4063051建议运行cmake与 G标志如下
  • 在 Mac OS X 中从相机捕获视频

    如何在 MacOS X 中过滤来自摄像头的视频流 我编写了 QuickTime 序列采集器通道组件 但仅当应用程序使用 SG API 时它才有效 如果应用程序使用 QTKit Capture 则该组件无法工作 有人知道我该如何实施它吗 您可
  • 如何围绕未正确发布的值演示竞争条件?

    我正在阅读 Java 并发实践 并查看第 51 页的示例代码 根据该书 这段代码如果没有正确发布 就有失败的风险 因为我喜欢编写示例代码并分解它们以证明它们是如何工作的 我尝试让它抛出 AssertionError 但失败了 引导我走向我的