爪哇 并发编程面试专栏 2021-10-09 728.volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗? volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。在 Java 中除了 long 和 double 之外的所有基本类型的读和赋值,都是原子性操作。 而 64 位的 long 和 double 变量由于会被 JVM 当作两个分离的 32 位来进行操作,所以不具有原子性,会产生字撕裂问题。但是当你定义 long 或 double 变量时,如果使用 volatile 关键字,就会获到(简单的赋值与返回操作的)原子性