语法
1.修饰变量的定义
2.修饰的共享变量(属性和静态属性的定义)
作用
最核心的,最主要的 解决内存可见性,其次是原子性和代码重排序
public class VolatileDemo {
private static boolean run = true;
static class Runner extends Thread{
@Override
public void run() {
while(run){
}
System.out.println("子线程退出");
}
}
public static void main(String[] args) throws InterruptedException {
Runner runner = new Runner();
runner.start();
Thread.sleep(2000); //主线程放弃2scpu ,让子线程运行
System.out.println("2s已到");
run = false;
}
}
2s已到
## 到这为之,程序还未走完
## 修改了run的值后,本应该子线程运行,并结束
## 显然,主线程修改的run值,子线程未读取到
## 这就是内存不可见性导致的
用volatile修饰共享变量
public class VolatileDemo {
private volatile static boolean run = true;
static class Runner extends Thread{
@Override
public void run() {
while(run){
}
System.out.println("子线程退出");
}
}
public static void main(String[] args) throws InterruptedException {
Runner runner = new Runner();
runner.start();
Thread.sleep(2000); //主线程放弃2scpu ,让子线程运行
System.out.println("2s已到");
run = false;
}
}
运行结果
2s已到 ## 主线程运行结束
子线程退出 ## 子线程运行结束