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。
    -- 才疏学浅,就能分析这么多了。

    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作