运行以下Java代码:
public class Testjava6 {
private static boolean flag = false;
static int i =0;
public static void main(String[] args) {
new Thread(() -> {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1 修改了flag 为 true");
flag = true;
}).start();
while (!flag){
i++;
}
System.out.println("循环了 "+i+"次");
System.out.println(flag);
}
}
运行结果:
当把线程休眠时间设置为10毫秒
public class Testjava6 {
private static boolean flag = false;
static int i =0;
public static void main(String[] args) {
new Thread(() -> {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1 修改了flag 为 true");
flag = true;
}).start();
while (!flag){
i++;
}
System.out.println("循环了 "+i+"次");
System.out.println(flag);
}
}
运行结果 : 出现了死循环
请解释为什么会出现死循环
可以从变量的内存可见性,JIT及时编译器等方向进行分析