flag = true
主内存
2.load
flag = false
CPU
main线程
5.load
6.use
9.write
3.use
4.read
1.read
public class Test { public static boolean flag = false; public static void main(String[] args) throws Exception { Thread t1 = new Thread(new Runnable() { @Override public void run() { //子线程休眠1s,让主线程启动后再去修改flag try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } //TODO: 修改成员变量 flag = true; System.out.println(\"子线程修改了flag = \" + flag); } }); t1.start(); while (true) { if (flag) { System.out.println(\"主线程退出\"); break; } } }}
工作内存
总线
变量副本
8.store
t1 线程
变量副本
工作内存
7. assign