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