亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么運行結果與老師不同?

代碼與老師一樣,但運行結果如下:

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號