游戏服务器转定时器

时间:2013-05-17 11:07:04

标签: java sockets timer multiplayer

我正在制作一个Java多玩家回合制游戏,我想限制每个玩家必须移动的时间,游戏由游戏会议或房间组成,每个房间有4个玩家。 游戏有大约40个游戏会话,每个会话至少有160个回合。

首先我查看了java.util.Timer,然后我发现ScheduledExecutorService看起来好多了,我可以为每个游戏会话设置SingleThreadScheduledExecutor,每回合创建一个新的runnable如果玩家make在runnable执行之前移动,我可以调用ScheduledFuture.cancel()方法。

理论上看起来很好,但我有一些顾虑,所以我想知道是否:

  • 这是正确的做法吗?还是有更好的选择?

  • 我是否可以为所有游戏会话设置ScheduledThreadPool 每个游戏会话一个SingleThreadScheduledExecutor

  • 我注意到取消ScheduledFuture会将其保留在。{ 记忆直到他的执行时间,这可能是一个问题 内存使用情况?

  • 最后,是否可以重复使用相同的runnable(每场比赛1次) 会话)而不是每回合创建一个新的。

1 个答案:

答案 0 :(得分:0)

ScheduledExecutorService是一个很好的起点。只需记住正确同步您对游戏状态的访问权限。

回收可运行的通常是合法的,但这可能不是最好的选择。

除非转弯数量巨大,否则取消任务的开销不值得。相反,请在您的可运行信息中包含正在计时的游戏内容。当任务执行时,检查游戏状态以查看是否仍然是当前转弯,如果转弯计数已经移动,则不执行任何操作。

这可以避免cancel()完成和执行任务之间的竞争条件,就像在截止日期前提交移动时一样。