java - 如何实现Java内存模型因果关系测试用例1

标签 java concurrency java-memory-model

我正在研究 Java 语言规范 17.4 中的 Java 内存模型。我想测试理解 java 内存模型的因果关系。我在 JMM causality test case 中找到了一组因果关系。 .我实现测试用例 1,它如下:

@JCStressTest
@State
public class CausalityTestCase1 {

    int x = 0;
    int y = 0;

    @Actor
    public void actor1(IntResult2 r) {
        r.r1 = x;

        if (r.r1 >= 0) {
            y = 1;
        }
    }

    @Actor
    public void actor2(IntResult2 r) {
        r.r2 = y;

        x = r.r2;
    }

}

我使用jcstress lib来测试这个案例。r1 == r2 == 1是不可能的,但没有发生。我认为我的实现没有得到纠正,但我不知道如何测试。

最佳答案

您可能正在运行 Intel 架构,而这种竞争条件不会发生。 VM 可以实现比 Java 内存模型要求的模型更严格的模型,但它们不是必须这样做。如果您使用 SPARC 或 ARM,您可能会发现不同的结果。 JMM 试图将所有这些架构包含在一个模型中。

关于java - 如何实现Java内存模型因果关系测试用例1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663062/

相关文章:

java - 使用 Java 中的 Jtree 和 File 列出文件和目录

java - @OneToMany 表关系中的冗余行数据或实体

java - Java对象头是什么?

java - 在Java中,构造函数中的final字段赋值涉及到哪些操作?

java - 分页如何工作以及在处理数百万条记录时它如何帮助减少响应时间?

java - ArrayList使用集合排序

apache - 限制Apache2中的并发连接数

java - 中断长工作线程

java - 为什么后台线程应该运行然后在一秒钟内停止?它应该永远运行吗?

Java happend-before 在同步块(synchronized block)中