大概情况是 程序开一个子线程,然后子线程里面有一个 flag 控制 while 循环
在子线程启动之后,等待一下。主线程改变flag 的变量。
然后在while循环中 什么都不加,程序异常,不能正确执行结果
在while循环中加入一个syso 输出语句。代码正确执行。
代码如下
public class 灵异代码 {
public static void main(String[] args) throws InterruptedException {
灵异多线程 t1 = new 灵异多线程();
t1.start();
Thread.sleep(500);
t1.isRun(false);
System.out.println("flag: " + t1.flag);
}
}
class 灵异多线程 extends Thread {
public boolean flag = true;
@Override
public void run() {
System.out.println("子线程开始执行...");
while(flag){
///这个输出语句注释和不注释影响结果//
// System.out.println("ing");
}
System.out.println("子线程结束执行...");
}
//控制线程的while循环
public void isRun(boolean flag){
this.flag = flag;
}
}
其实程序一开始是想证明多线程时,关键字 volatile 修饰flag在多线程的可见性。
而却莫名其妙的出个这一档子事
知道后来偶然看到R大的解释,大概是个硬件,解释器有关吧。反正似懂非懂
* 参考网址
* https://www.zhihu.com/question/39458585
* http://hllvm.group.iteye.com/group/topic/34932#post-232535