如何证明波动性可见性保证?

问题描述 投票:0回答:1

我正在阅读一篇关于 Java Volatile 关键字的文章,有一些问题。 点击这里

public class SharedObject {

    public int counter = 0;

}

也想象一下,只有线程 1 递增

counter
变量,但线程 1 和线程 2 都可能不时读取
counter
变量。

如果未声明

counter
变量
volatile
则无法保证
counter
变量的值何时从 CPU 寄存器写回主内存。这意味着,CPU 寄存器中的
counter
变量值可能与主内存中的不同。

如何验证没有 volatile 就无法保证可见性?

java concurrency volatile java-memory-model
1个回答
0
投票

为了确保 volatile 有效,您可以使用以下代码:

public class VolatilityDemo {

    private static volatile boolean value = true;

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            while (value);
        }).start();
        Thread.sleep(1000);
        value = false;
    }
}

如果删除 volatile,线程将永远不会终止并且应用程序将挂起。

© www.soinside.com 2019 - 2024. All rights reserved.