1

我有一些定期操作要在我的应用程序中执行,比如 period T。目前,我正在使用Timer.scheduleAtFixedRate(TimerTask, 0, T). 现在我想避免单个操作的重叠(在某些情况下,单个操作可能需要比 更多的时间T)。我已经阅读Timer了使用单个线程执行操作的实现,因此在标准情况下不会有重叠。问题是,在我的情况下,单个操作不是由TimerTask传递给直接执行的Timer:操作只是从它开始,并且它们是异步执行的。

TimerTask因此,如果执行在前一个操作完成之前开始新操作,则可能存在重叠。相反,如果发生重叠,我想等待上一次执行的终止,并在上一次完成后立即开始新的操作。

获得这种行为的最佳实现是什么?我应该从 Timer 切换到另一个支持吗?它是 Android 环境,所以我更喜欢 Java 标准 ( util.concurrent) 或一些基于 Android 的实现,而不是基于 Spring Quartz 和其他特定框架的其他实现。

4

1 回答 1

0

您可以使用Executors.newScheduledThreadPool(1)来实现这一点。它比使用更容易Timer{,Task}

于 2013-07-03T10:28:44.280 回答