2013-07-11 126 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

然后,您可以让消息总线进行线程化,以便玩家不必阻止与其他玩家进行通信。 –