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


    大概情况是  程序开一个子线程,然后子线程里面有一个 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



  • 相关阅读:
    How to upload a file in MVC4
    安装升级System.Web.Optimization.dll
    Model Binding To A List
    TD中{text-overflow:ellipsis;} 用法
    表格
    CSS定位
    清除浮动的几种方式
    css浮动原理和特性
    前端规范
    块元素和内嵌元素
  • 原文地址:https://www.cnblogs.com/fangyuandoit/p/13713877.html
Copyright © 2020-2023  润新知