我正在阅读一篇关于 Java Volatile 关键字的文章,有一些问题。 点击这里
public class SharedObject {
public int counter = 0;
}
也想象一下,只有线程 1 递增
counter
变量,但线程 1 和线程 2 都可能不时读取 counter
变量。
如果未声明
counter
变量 volatile
则无法保证 counter
变量的值何时从 CPU 寄存器写回主内存。这意味着,CPU 寄存器中的 counter
变量值可能与主内存中的不同。
如何验证没有 volatile 就无法保证可见性?
为了确保 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,线程将永远不会终止并且应用程序将挂起。