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