1.synchronized保证可见性的原理
在没有发生锁消除的前提下,当当前线程遇到synchronized关键字时会把工作内存中的缓存清空,这样当前线程栈中共享变量的“副本”就没有了,当再次要用到共享变量时,只能去主内存中拷贝一份新的“副本”,这样就保证了每次读取的共享变量的值都是最新的。
static boolean run = true;
static boolean flag = true;
public static void test14(){
Object o = new Object();
Thread t1 = new Thread(() -> {
while (flag) {
synchronized (o){
System.out.println("我啥也没做...");
}
if (!run){
flag = false;
System.out.println("是时候退出了...");
}
}
}, "t1");
t1.start();
Sleep(0.001);
run = false;
Sleep(1);
}
public static void main(String[] args) {
test14();
}
2.运行结果