共享变量+volitale
- 保证线程间的可见性
- 禁止指令重排
/*
一、boolean flag运行结果:
线程1 flag=false
【一直阻塞】
二、volatile boolean flag运行结果:
线程2 循环次数=71585922
线程2 over
线程1 flag=false
**/
public class T {
private static volatile boolean flag = true;
public static void main(String[] args) {
new Thread(() -> {
try {
//保证线程2 先与 线程1 执行
Thread.sleep(20);
flag = false;
System.out.println(Thread.currentThread().getName() + " flag=" + flag);
} catch (Exception e) {
}
}, "线程1").start();
new Thread(() -> {
try {
int counter = 0;
//boolean flag:线程2 一直阻塞状态,说明JIT底层优化了
//volatile boolean flag:禁止指令重排,即禁止JIT底层代码优化
while (flag) {
++counter;
}
System.out.println(Thread.currentThread().getName() + " 循环次数=" + counter);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + " over");
}, "线程2").start();
}
}
标签:false,Thread,flag,boolean,线程,volatile
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18359073