1

我最初的目的是每 xx TimeUnit 执行一段代码,而不是简单地循环它并检查一个标志。我做了一些研究,发现了两个解决方案:

  1. Timer+ TimerTask- 一旦计时器暂停,您必须重新更新另一个。TimerTask 也是如此。

  2. ScheduledThreadPoolExecutor+ Runnable- 与前面的组合相同。但有人说这是增强版。但它仍然不提供我之前提到的功能。

现在,我正在寻找一种优雅的方法来解决这个问题。也许我应该专注于锁?

4

1 回答 1

2

我会使用 ScheduledExecutorService 并使用 Future.cancel() 暂停。并 scheduleAtFixedRate 再次启动它。

如果要更改期间,请取消并在新期间再次添加它,假设它没有暂停。

如果你想隐藏这个细节,你可以创建一个带有 suspend()、resume() 和 setPeriod() 方法的包装器。

于 2012-04-27T08:22:51.087 回答