已采納回答 / 慕粉1473724057
我的理解是這樣的 既然是多線程,多天線程同時進行,在農民和隋軍的那兩條線程進行的同時,就是main下的主線程也在運行(Stage),它在執行農民和隋軍的線程的同時,也在一直往下運行,運行到armyTaskOfSuiDynasty.keepRunning=false;?armyTaskOfRevolt.keepRunning=false;農民和隋軍的線程自然也就停止了。
2018-05-29
已采納回答 / V還在路上
其區別主要在于共享數據,Runnable是可以共享數據的,多個Thread可以同時加載一個Runnable,當各自Thread獲得CPU時間片的時候開始運行runnable,runnable里面的資源是被共享的。
2018-05-29
已采納回答 / 我夢寐以求是真愛與自由
首先stage()本身就是一個線程,而在這個線程里又嵌了兩個線程。寫在Stage.Run()里面的Thread.sleep(50)只是讓stage這個線程休眠50毫秒,但是并沒有終止它嵌入的兩個線程,所以兩個軍隊一直在打,直到stage休眠結束執行到keepRunning = false時,三個線程都結束了,另外如果你把stage里面的Thread.sleep()注釋掉你會發現它一次都沒執行,我個人理解是線程異步,先編譯再執行線程,編譯完keepRunning已經是false了,所以不執行。
2018-05-27
最贊回答 / 慕斯卡3197864
run()方法只是一個普通方法,調用run()的話就相當于一個普通方法調用,并沒有實現多線程。而start()方法才是真正啟動線程的方法。調用start()后,此線程處于就緒(可運行)狀態,并沒有運行,一旦得到cpu時間片,就開始執行run()方法,這里方法 run()稱為線程體,它包含了要執行的這個線程的內容,run()方法運行結束,此線程隨即終止。
2018-05-23
已采納回答 / 慕斯卡3197864
應該是控制臺顯示的內容有限,而輸出的內容太多了,所以剛開始的內容已經不顯示了。你可以修改隊伍進攻時間,即<...code...>這樣應該就能看到了剛開始的旁白了。
2018-05-23
最贊回答 / TendeRess
//內部類的話要用主類的實例去new一個內部類的實例對象,比如Actress actress = new Actor().new Actress(); Thread actressThread = new Thread(actress,"Ms.Runnable"); actressThread.start();//這樣就行了~<...code...>
2018-05-21
最贊回答 / no4990
這篇文章說得很清楚了。當前的線程阻塞,等待調用join()的線程執行。當前的線程可以是 “調用了join()的線程之外的任意線程”。java中的Thread類的joinjoin是Thread的實例方法,官方解釋為:等待該線程終止。其作用就是將調用join的線程優先執行,當前正在執行的線程阻塞,直到調用join方法的線程執行完畢或者被打斷,主要用于線程之間的交互。還有兩個重載的方法:1、join(long?millis),等待該線程終止的時間最長為 millis 毫秒。為 0 意味著要一直等下去。2、joi...
2018-04-23
已采納回答 / 泰勒伯頓
這里存在一個概念性問題:工作內存 和? 主內存線程操作數據時:會將主內存中的數值read -&一個圖load 到工作內存中線程操作完成后:工作內存中的數據 store -&:線程write 到主內存中<...圖片...>這里畫...
2018-04-18