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 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能