java - 重新安排游戏'大厅'的TimerTask

时间:2012-06-21 15:42:41

标签: java timer scheduling timertask

方案
我正在制作一款流行的纸牌游戏。需要有一段时间人们可以加入游戏。有时候,这段时间太短了。因此,我想让人们延长等待期。 对于示例数字,默认的“大厅时间”为45秒,每个分机为15秒。

问题
我决定使用Java的计时器。当'lobby'开始时,TimerTask从现在起安排45秒:

UnoStartTimer.schedule(new UnoStartTask(), 45000);

当有人想延长延迟时,这是我想要运行的伪代码:

UnoStartTimer.reschedule(UnoStartTimer.getNextScheduledTime() + 15000);

快速查看the javadoc表示使用Timer类的这种简单解决方案不存在。

以下是我提出的可能性:

  • 我应该使用不同的调度类(我想我在另一个问题的答案中看到了一个名为ScheduledExecutorService的东西,但它似乎并不像我的问题的解决方案一样)
  • 有一种方法可以用Timer做到这一点,我公然忽略它
  • 没有一种简单的方法可以做到这一点

那么,它是哪一个?

2 个答案:

答案 0 :(得分:0)

看看java.util.Timer。除其他外,我看到了cancel()方法。我还看到一个schedule()方法,它接受Date对象而不是毫秒。

您可以创建一个Date对象,该对象从现在起45秒,使用该时间计划计时器,如果发生扩展,请取消它,将15秒添加到原始Date对象并使用该新时间计划任务。 / p>

答案 1 :(得分:0)

根据Timer文档,在Java 1.5及更高版本中,您应该更喜欢ScheduledThreadPoolExecutor。 (您可能希望使用Executors.newSingleThreadScheduledExecutor()创建此执行程序以方便使用;它创建的东西很像Timer。)

请参阅这篇文章 - > Resettable Java Timer