我正在做一个Java多玩家的回合制游戏,我想限制每个球员必须使他们的行动的时候,游戏是由游戏会话或房间,每个房间有4个玩家。 这场比赛有大约40场比赛,每场比赛至少有160转。游戏服务器翻转计时器
首先我看着java.util.Timer
,然后我发现了,这似乎更好的ScheduledExecutorService
,我可以为每个游戏会话的SingleThreadScheduledExecutor
,创建一个新的可运行的每一个转弯,如果玩家作是行动前可运行的是执行我可以调用ScheduledFuture.cancel()
方法。
在理论上似乎不错,但我有一些顾虑,所以我想知道:
这是正确的做法?或者有更好的选择?
我能不能对所有游戏会话为每个游戏会话
ScheduledThreadPool
代替 一个SingleThreadScheduledExecutor
?我注意到,取消
ScheduledFuture
将保持在 内存中,直到他的执行时间,可这是一个问题的 内存使用情况?最后,是否可以重复使用相同的runnable(每个游戏 会话为1),而不是每次都创建一个新的游戏。
圈数将以每小时左右30.000。让任务执行,只检查游戏状态接近更简单的解决方案,但是在记忆方面,你认为取消ScheduledFuture会更好吗? – Rias
每个对象都将低于20个字节。所以如果最后期限是一个小时的话,那核心功能只有~60万,这没什么。如果截止日期是一天,那还不到15megs,这还不足以担忧。如果截止日期更长,您可能希望将截止日期保存到磁盘,并定期扫描它们,并且只安排那些不久的将来。 –