【发布时间】:2018-10-26 17:14:37
【问题描述】:
我引用了 Oracle 在 Atomic Access 上的 Java 文档
- 对于引用变量和大多数原始变量(除 long 和 double 之外的所有类型)而言,读取和写入都是原子操作。
- 对于声明为
volatile的所有变量(包括 long 和 double 变量),读取和写入都是原子操作。
我了解volatile 的工作原理。但是提到在第二条语句中为long 和double 变量显式声明volatile 以获得原子访问的要求,是为引用变量和大多数原始变量(除long 和double 之外的所有类型)制作volatile 声明在第一条语句中可选。
但我看到代码在int 原始类型中使用显式volatile 声明来实现原子访问;并且不这样做并不能保证原子访问。
int variable1; // no atomic access
volatile int variable2; // atomic access
我错过了什么吗?
【问题讨论】:
-
Atomicity is very different to volatility...
volatile最后一行中的关键字用于可见性目的(而不是原子性)。 -
@Oleksandr 该链接肯定有帮助。但实际上我混淆了原子性和可见性,我从答案中得到了澄清。
标签: java concurrency atomic volatile