一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量
会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?
因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正
在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。
但是对一个 volatile 型的 long 或 double 变量的读写是原子。
一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量
会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?
因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正
在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。
但是对一个 volatile 型的 long 或 double 变量的读写是原子。