一、Volatile
1.代码:
package com.tuling.concurrent;
public class VolatileVisibilityTest {
private static boolean initFlag = false;
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
System.out.println("等待数据准备……");
while (!initFlag);
System.out.println("====================数据准备完毕,执行程序逻辑");
}).start();
Thread.sleep(2000);
new Thread(()->{
prepareData();
}).start();
}
public static void prepareData() {
System.out.println("准备数据中……");
initFlag=true;
System.out.println("准备数据完毕!!!");
}
}
2.结果
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe"......
等待数据准备……
准备数据中……
准备数据完毕!!!
Process finished with exit code 0
注:将上句改为
private volatile static boolean initFlag = false;
则结果为:
"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe"
等待数据准备……
准备数据中……
准备数据完毕!!!
====================数据准备完毕,执行程序逻辑
Process finished with exit code 0