school-boy 2016-12-05 06:32 采纳率: 0%
浏览 1044

java多线程与并发的线程之间通信的问题

既然每个线程有自己的工作内存为什么我执行下面代码的时候主内存变量的更改能够影响线程
为什么会执行到 System.out.println(num+"*****************线程终止************");
还有为什么我把System.out.println(num);一行注释掉就永远停止不了了
那么Java到底在什么时间执行read和load、store和write

 public class CourrTest02 extends Thread{
    private static long num=0;
    private  boolean a=true;
   @Override
    public void run() {
       while(num!=10001){
    //  
        System.out.println(num);
           }

       System.out.println(num+"*****************线程终止************");
    }

public static void main(String[] args) throws InterruptedException {
    boolean b=true;
    CourrTest02 c1=new CourrTest02();

    c1.start();
    Thread.sleep(1000);

    for(int i=0;i<10000;i++){
        c1.num=10001;

    }

}

}

  • 写回答

3条回答 默认 最新

  • andey56789 2016-12-05 07:15
    关注

    我觉得吧。你确实写的是c1.num = 10001。而且num定义的位置确实应该会影响到线程的运行吧。
    至于为什么注掉了System.out.println(num)会导致停步下来。我觉得可能和线程抢占有关吧。在打印的时候会阻塞这个线程,就会执行到c1.num= 10001。
    -- 才疏学浅,就能分析这么多了。

    评论

报告相同问题?

悬赏问题

  • ¥15 vue2(标签-chrome|关键词-浏览器兼容)
  • ¥15 python网络流自动生成系统 医学领域
  • ¥15 sql查询仓库里都有什么
  • ¥15 代码的修改,添加和运行完善
  • ¥15 krpano-场景分组和自定义地图分组
  • ¥15 lammps Gpu加速出错
  • ¥15 关于PLUS模型中kapaa值的问题
  • ¥15 关于博途V17进行仿真时无法建立连接问题
  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器