2013-07-11 168 views
0

如何創建一個for循環來創建多個可識別的線程。線程在遊戲中是Players,需要相互溝通。我需要能夠訪問每位玩家的獲得者和制定者。在循環中創建多個線程

基本上,每個Player都有一個名稱屬性,並且需要可識別。如果我這樣做,我不知道他們是如何彼此識別...

for (int i = 0; i < numberOfPlayers; i++) 
    { 
     Thread t = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2))); 
    } 
+0

如果您需要在聲明t調用start()方法之後啓動線程, t.start();'和[本教程](http://www.codeproject.com/Articles/616109/Java-Thread-Tutorial)可以幫助你,或[這些例子](http://www.codeproject .com /文章/ 616115/Java-Thread-Example) – 2013-07-11 19:48:27

回答

1

如果你知道numberOfPlayers然後創建Thread一個數組,填充它的循環中:

Thread[] players = new Thread[numberOfPlayers]; 

for (int i = 0; i < numberOfPlayers; i++) { 
    players[i] = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2))); 
    // You can start the thread here only 
} 

但是,如果你不提前知道numberOfPlayers,在創建數組,你可以創建一個ArrayList<Thread>和每一個新的線程添加到它:

List<Thread> players = new ArrayList<Thread>(); 

for (int i = 0; i < numberOfPlayers; i++) { 
    players.add(new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2)))); 
} 
2

一種選擇是創建的玩家Map,並通過這個Map每個Player,使他們可以相互直接通信(或使地圖static所以它的所有Player對象可見,或其他)

Map<String, Player> players = new HashMap<>(); 
for(int i = 0; i < numberOfPlayers; i++) { 
    players.put("Player" + (i + 1), new Player("Player" (i + 1), (i + 1), (i + 2), players)); 
} 
for(Player player : map.values()) { 
    new Thread(player).start(); 
} 

另一種選擇是創建一個充當消息總線的類,該消息總線可以訪問所有玩家的設置器 - 如果玩家想要將消息發送給其他玩家,則它將消息發送到消息總線,然後消息總線請注意調用適當的setter方法

+0

然後,您可以讓消息總線進行線程化,以便玩家不必阻止與其他玩家進行通信。 –