Java - volatile
Java - volatile
1. volatile的特性
- 可见性。对于 volatile 变量的读和写,任意线程总是能够看到该volatile变量最新的值。
- 原子性。对于 volatile 变量的读和写操作具有原子性。(复合操作除外,如:num++)。
2. volatile的内存语义
- 当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。
- 当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
3. volatile的内存语义实现
通过读/写屏障,禁止部分读写和重排序。