4

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

问题
我决定使用 Java 的计时器。当“大厅”开始时,一个 TimerTask 计划在 45 秒后执行:

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

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

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

快速浏览一下javadoc表明不存在这样一个使用 Timer 类的简单解决方案。

这是我想出的可能性:

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

那么是哪一个呢?

4

2 回答 2

0

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

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

于 2012-06-21T15:50:24.910 回答
0

根据 Timer 文档,从 Java 1.5 开始,您应该更喜欢 ScheduledThreadPoolExecutor。(您可能希望使用 Executors.newSingleThreadScheduledExecutor() 创建这个执行器以方便使用;它创建的东西很像 Timer。)

请参考这篇文章 ->可重置 Java 计时器

于 2013-11-14T20:59:50.993 回答