您的位置:首页 > 编程语言 > Java开发

java一次多线程的怪异时间和偶然发现相关解释

2018-03-01 14:54 309 查看
大概情况是  程序开一个子线程,然后子线程里面有一个 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: