我有一個應該同時運行多個線程的程序。Java線程切換
這是一款紙牌遊戲Uno的模擬,你應該爲每個玩家設置一個線程。
現在這裏有一個問題:每當一名牌手拿到一張卡牌時,手牌上的卡牌數量和顏色都是相同的,但這不是輪到這個牌手,他可以「切斷」線路並放下卡牌。切線的球員旁邊的球員繼續。
我有一類球員:
class Player implements Runnable {
public boolean isHisTurn = false;
public Thread makeMove(final Card topCard, final boolean isHisTurn) {
Thread thread = new Thread(this);
thread.start();
return thread;
}
}
thread.start(),然後開始運行方法,在那裏我有我的邏輯和決策。在運行()開始時,線程會隨機休眠300-700毫秒,以便在此時間框架內實現切割線。
我的問題是,我是否應該將線程存儲在某個地方,如果是,在哪裏,以及如何在不同的玩家輪流之間切換線程?我知道它與布爾isHisTurn有關,我只是不知道如何使用它。
是的,這是作業,但我只是要求它的一小部分,我不想要一個完整的答案,只是推動我在正確的方向。
我懷疑這應該有多個線程。相反,一個線程執行一次「轉向」,從任何可以提供它的牌中拿走該牌。 –
您需要爲每個線程提供一些類型的監視器,以便您可以告訴線程輪到他們可以運行了。這將阻止所有其他線程執行,直到您告訴他們可以執行爲止。看看[鎖定對象](http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html) – MadProgrammer
你做錯了。你不想爲每一個動作啓動一個新的線程。你可能希望每個球員都有一個單獨的線索,儘管我不知道這有什麼強烈的動機。 – EJP