不加volatile時(shí),打印不了成功
因?yàn)閮蓚€(gè)線程中的工作內(nèi)存都有initFLag副本,其中一個(gè)變了對(duì)另一個(gè)并沒(méi)有影響
package com.kang.jmm;
/**
* @author klr
* @create 2020-09-10-22:23
*/
public class VolatileVisibility {
// private static boolean initFlag = false;
private static volatile boolean initFlag = false;
//兩個(gè)線程時(shí),每個(gè)線程都有自己的變量副本值
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("還未準(zhǔn)備數(shù)據(jù)");
while (!initFlag) {
}
System.out.println("成功");//不加volatile時(shí),執(zhí)行不了這句話,因?yàn)閕nitFlag是在第二個(gè)線程中變的,并不能影響到第一個(gè)線程的initFlag
}
}).start();
Thread.sleep(2000);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("準(zhǔn)備數(shù)據(jù)中");
initFlag=true;
System.out.println("數(shù)據(jù)完成");
}
}).start();
}
}