为了账号安全,请及时绑定邮箱和手机立即绑定

为什么运行结果与老师不同?

代码与老师一样,但运行结果如下:

https://img1.sycdn.imooc.com//5adb2cd50001b86d02280248.jpg

并不是每个线程分别演出10次,这是什么原因呢?看了下别的答案好像和电脑的CPU核数有关,但还不是很清楚,有人能比较清楚地介绍下吗?

另外,怎么控制才能和老师的输出结果一样呢?

万分感谢!


以下是我的代码

public class Actor extends Thread {
    public void run() {
       System.out.println(getName()+"登台演出了!");
       int count=0;
       boolean keepRunning=true;
       while(keepRunning) {
           System.out.println(getName()+"登台演出了:"+(++count));
           if(count==100)
              keepRunning=false;
           if(count%10==0) {
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
           }
       }
       System.out.println(getName()+"的演出结束了");
    }
   
    public static void main(String[] args) {
       Thread actor= new Actor();     
       actor.setName("Mr. Thread");
       actor.start();
       Thread actress = new Thread(new Actress(), "Ms. Runnable");
       actress.start();
    }
}
 
class Actress implements Runnable{
    public void run() {
       System.out.println(Thread.currentThread().getName()+"登台演出了!");
       int count=0;
       boolean keepRunning=true;
       while(keepRunning) {
           System.out.println(Thread.currentThread().getName()+"登台演出了:"+(++count));
           if(count==100)
              keepRunning=false;
           if(count%10==0) {
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
           }
       }
       System.out.println(Thread.currentThread().getName()+"的演出结束了");
    }
}


正在回答

2 回答

嘿嘿,多运行几次你就会发现,结果不会总是一样的,多核计算机的时间片分配问题

0 回复 有任何疑惑可以回复我~
public class Actor extends Thread {

    public void run() {

       System.out.println(getName()+"登台演出了!");

       int count=0;

       boolean keepRunning=true;

       while(keepRunning) {

           System.out.println(getName()+"登台演出了:"+(++count));

           if(count==100)

              keepRunning=false;

           if(count%10==0) {

              try {

                  Thread.sleep(1000);

              } catch (InterruptedException e) {

                  e.printStackTrace();

              }

           }

       }

       System.out.println(getName()+"的演出结束了");

    }

   

    public static void main(String[] args) {

       Thread actor= new Actor();     

       actor.setName("Mr. Thread");

       actor.start();

       Thread actress = new Thread(new Actress(), "Ms. Runnable");

       actress.start();

    }

}

 

class Actress implements Runnable{

    public void run() {

       System.out.println(Thread.currentThread().getName()+"登台演出了!");

       int count=0;

       boolean keepRunning=true;

       while(keepRunning) {

           System.out.println(Thread.currentThread().getName()+"登台演出了:"+(++count));

           if(count==100)

              keepRunning=false;

           if(count%10==0) {

              try {

                  Thread.sleep(1000);

              } catch (InterruptedException e) {

                  e.printStackTrace();

              }

           }

       }

       System.out.println(Thread.currentThread().getName()+"的演出结束了");

    }

}


0 回复 有任何疑惑可以回复我~
#1

神亿般的存在

你没说那里导致这个问题啊,代码和我打的一样,还是出现这个问题
2018-05-21 回复 有任何疑惑可以回复我~
#2

慕斯卡3197864 提问者 回复 神亿般的存在

看别的答案,好像是因为:多核CPU+运行结果的动态性
2018-05-24 回复 有任何疑惑可以回复我~
#3

RSF 回复 慕斯卡3197864 提问者

那你知道怎么改成跟老师一样的吗??/
2018-06-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么运行结果与老师不同?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信