我最初的目的是每xx TimeUnit执行一段代码,而不是简单地循环它并检查一个标志。我做了一些研究,发现了两个解决方案:
Timer
+ TimerTask
- 计时器暂停后,您必须重新创建另一个计时器。 TimerTask也是如此。
ScheduledThreadPoolExecutor
+ Runnable
- 与之前的组合相同。但有人说这是一个增强的。但它仍然没有提供我之前提到的功能。
现在,我正在寻找一种优雅的方法来解决这个问题。也许我应该专注于锁?
答案 0 :(得分:2)
我会使用ScheduledExecutorService并使用Future.cancel()来挂起。和scheduleAtFixedRate再次启动它。
如果您想更改期间,则取消并使用新期间再次添加,假设未暂停。
如果要隐藏此详细信息,可以使用suspend(),resume()和setPeriod()方法创建包装器。