1.先来做个实验
public class Sync {
static boolean isRun = true;
static void run() {
while (isRun) {
}
System.out.println("结束");
}
public static void main(String[] args) throws Exception {
new Thread(() -> Sync.run()).start();
Thread.sleep(100);
Sync.isRun = false;
System.out.println(Sync.isRun);
}
}
运行结果并不会打印结束
如果给isRun加上volatile会怎么样呢?
所谓的可见性是指当一个变量被改变时,其他线程会强制读取主存中的值。被volatile修饰的变量可以一直被cpu看见,不会被cpu缓存给遮蔽掉。