Java 层面保证内存可见性的方式有很多:
1. volatile,用volatile基本数据类型,可以保证每次CPU去操作数据时,都直接去主内存进行读写。
2. synchronized,synchronized的内存语义可以保证在获取锁之后,可以保证前面操作的数据是可见的。
3. lock(CAS-volatile),也可以保证CAS或者操作volatile的变量之后,可以保证前面操作的数据是可见的。
4. final,是常量没法动。
代码示例
public class VisibilityDemo {
static boolean flag = true;
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
while (flag) {
}
System.out.println("t1结束!");
}).start();
Thread.sleep(10);
flag = false;
}
}
运行结果:t1 没法正常结束.....
volatile 保证内存可见性
public class VisibilityDemo {
static volatile boolean flag = true;
public s