[英]Differences between volatile and atomic
int value = 0;
volatile boolean done = false;
// Thread A:
value = 1; done = true;
// Thread B:
if (done) System.out.println(value);
这很好,因为 done 被定义为 volatile。
相同的代码呢,除了 done 被定义为 AtomicBoolean 之外 - 它是否达到相同的效果? 换句话说,原子(RMW)操作除了原子和可见之外,是否还保证所有先前的写入都刷新到共享的 memory?
int value = 0;
AtomicBoolean done = new AtomicBoolean(false);
// Thread A:
value = 1; done.set(true);
// Thread B:
if (done.get()) System.out.println(value);
来自java.util.concurrent
的 Javadoc :
用于访问和更新原子的 memory 效果通常遵循 volatile 的规则,如 Java 语言规范(17.4 Memory 模型)中所述
- get 具有读取 volatile 变量的 memory 效果。
- set 具有写入(分配)易失性变量的 memory 效果。
- ...
所以在这种情况下, volatile
和AtomicBoolean
之间没有区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.