我正在使用线程每客户端模型的游戏。游戏运行时,每半秒钟所有玩家都需要更新。所有更新都必须在半秒内完成,因此需要全部同时执行。我的想法是有保留的,当“全局更新”需要做的,然后在时机成熟时,通过所有的球员,并告诉它更新曲目类:从一个不同于它被调用的线程执行方法从
for(Player p : currentPlayers) {
p.update();
}
的问题是,因为每个玩家都有自己的线索,所以我希望玩家能够利用这一点,因为它已经在那里了。如果我通过不同类的更新,那么有一个线程可以执行几百个线程单独执行的操作。我如何设计它,以便如果一个线程在Player类中调用方法'update()',与调用它的线程执行它不同的线程,或者可能实现相同目标的不同方法?
如果您需要任何澄清,请询问!非常感谢!
UPDATE:(!我无法弄清楚如何格式化长代码量在职位)你们认为这是什么:
更新2:刚刚意识到我需要知道当所有玩家完成更新重置最后一次...
public class PseudoExample implements Runnable { // Assume 'players' is full of active players. private Player[] players = new Player[100]; private long lastUpdate = System.currentTimeMillis(); public void run() { while (true) { if (System.currentTimeMillis() - lastUpdate >= 500) { for (Player p : players) { p.update = true; } } try { Thread.sleep(10); } catch (InterruptedException e) { } } } private class Player implements Runnable { private boolean update = false; public void run() { while (true) { if (update) { // Do updating here ... } try { Thread.sleep(10); } catch (InterruptedException e) { } } } } }
从不同线程执行方法的唯一方法是从另一个线程执行它。队列对传递控制信息很有用。然而,这种设计听起来很复杂。吻; *特别*带线程。 – 2012-04-13 00:32:26
这听起来并不难。我正在考虑尝试一种“准备更新”的标志,然后一旦每个线程都进行了更新,就会重置标志。 – 2012-04-13 00:35:48
不,这确实很难。为什么需要多个线程?线程之间的交互如何工作?如何/在哪里同步控制?时间分享和事件处理如何保持有序?等等等等。除非有事物被平行化,否则线程实际上会减慢程序的速度。而且很难让这些更正确,特别是在拥有大量共享状态的情况下。主题*不是*参与者:-) – 2012-04-13 00:36:59