已采納回答 / 福山潤
代碼1:兩個線程同時走,他倆公用一個FlagSender對象里面的flag,當線程t1走第一遍時,flag等于false,不等待直接輸出,然后將falg致成true,線程t1等待,這時候線程t2 while里面的!f.isFlag() 為false,所以往下進行輸出又將flag致成false,這時線程t1又開始執行。以此類推。代碼2:兩個對象都在while里面進行死循環,所以只打印一次。
2017-02-04
已采納回答 / bbug
java多線程可以近似看成同時執行,不過本質上計算機能同時工作的線程數是有限個的(取決于你的CPU)老師演示的時候農民軍和隋軍交替結果看起來應該是至少有兩個線程是同時工作的。而你這個明顯是僅分配給了這個程序一個線程。多線程是為了解決某些應用上需要等待其他的結果(比如瀏覽器訪問一個網址需要等待服務器返回HTML文件才能繼續執行顯示頁面的操作)才能繼續執行,那么這段時間cpu可以去執行其他線程的程序。但是如果這個線程可以一口氣執行下去的話,中途其他線程是沒有辦法執行的。-----------------以下是...
2017-01-04
已采納回答 / 勤勞工作又不粘人的小妖精
線程只要啟動之后不讓他等待,就會執行一次代碼循環后結束。但其中的過程并不是連續的,代碼中指令執行一個while循環后,會釋放系統資源使得其他線程有機會競爭系統資源,倘若當前線程休眠(等待),就不會再對資源進行爭用,自然也就不會執行下一個while了。隋唐演義舞臺stage就是這樣,由于舞臺休眠,不去爭用系統資源,所以舞臺的run()方法中指令就停止在sleep那個點,而剩下的隋軍和農民軍線程是活躍的,自然只能看到他們兩個爭用資源了。
2016-12-09
已采納回答 / Askusity
Actor是Thread的子類,這是定義一個父類類型的引用指向一個子類的對象,如果子類中重寫了父類中的一個方法,那么在調用這個方法的時候,將會調用子類中的這個方法,如果子類中定義了父類中沒有的方法是沒辦法執行的,這里呢,你可以理解為:Actor actor=new Actor();
2016-11-17
已采納回答 / silencecorner
條件不滿足時也就是其它線程還沒有將數據寫回(這里的lockObj是EnergySystem的final成員,用來標記EnergySystem,lockObj.wait()也就相當于EnergySystem實例.wait()),等待寫入之后(也就是滿足條件),執行邏輯代碼,在喚醒其它線程(有可能還沒有寫入數據的)??梢曰仡^看爭用條件那節,有助于理解,我專門截了圖。<...圖片...>
2016-10-31