如何暂停/恢复或更改TimerTask的周期时间?

时间:2012-04-27 08:17:16

标签: java multithreading locking scheduled-tasks

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我会使用ScheduledExecutorService并使用Future.cancel()来挂起。和scheduleAtFixedRate再次启动它。

如果您想更改期间,则取消并使用新期间再次添加,假设未暂停。

如果要隐藏此详细信息,可以使用suspend(),resume()和setPeriod()方法创建包装器。