繁体   English   中英

Java 发生之前的关系?

[英]Java happens-before relationship?

考虑以下代码。

public class Test {
    private boolean running = false;

    public void run() {
        running = true;
    }

    public void test() {
        boolean running1 = running;
        boolean running2 = running;
        System.out.println("running1: " + running1);
        System.out.println("running2: " + running2);
    }
}

线程 A 调用run() ,然后另一个线程 B 调用test()并且不应该有任何发生之前的关系。 我知道不能保证线程 B 看到线程 A 所做的更改。 但是这个程序的output有没有可能是:

running1: true
running2: false

是的,这是可能的,因为它没有被明确禁止。

running1running2的赋值的running读取可以相对于彼此以任何顺序发生,而对running2的读取可能发生在第一个System.out.println之后。 没有什么可说的,任何一个读取都应该来自缓存或主 memory。

基本上,它对于可以打印的内容(以及为什么)非常开放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM