Java 的原语上的 volatile

标签 java volatile primitive

为什么我们需要基元上的 volatile ?我发现的最常见的例子是 that :

volatile boolean shutdownRequested;

...

public void shutdown() { shutdownRequested = true; }

public void doWork() { 
    while (!shutdownRequested) { 
        // do stuff
    }
}

但是当我尝试自己运行它时。 volatile 声明没有改变。它以 volatile 和非 volatile 停止 shutdownRequested

最佳答案

从本质上来说,Volatile 是用来表示一个变量的值会被不同的线程修改。

volatile Java 变量意味着:

该变量的值永远不会在线程本地缓存:所有读取和写入都将直接进入“主内存”; 并且对变量的访问就像将其包含在同步块(synchronized block)中一样,对其自身进行同步。

关于Java 的原语上的 volatile ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15786619/

相关文章:

javascript - Javascript 中字符串原语和字符串包装对象之间的区别

Java 内存使用 - 原语

java - 将分号文本转换为Excel

java - ArrayList.sort()方法

java - commons-exec 命令行不接受 "*"?

java - Jackson 动态更改 JsonIgnore

compiler-construction - 何时将 volatile 与共享 CUDA 内存一起使用

java - 多线程场景下的 volatile+synchronized 组合

java - 可以证明应该使用 "volatile"declare 的代码示例

java - 如何克服原语按值传递的事实