我有一些定期操作要在我的应用程序中执行,比如 period T
。目前,我正在使用Timer.scheduleAtFixedRate(TimerTask, 0, T)
. 现在我想避免单个操作的重叠(在某些情况下,单个操作可能需要比 更多的时间T
)。我已经阅读Timer
了使用单个线程执行操作的实现,因此在标准情况下不会有重叠。问题是,在我的情况下,单个操作不是由TimerTask
传递给直接执行的Timer
:操作只是从它开始,并且它们是异步执行的。
TimerTask
因此,如果执行在前一个操作完成之前开始新操作,则可能存在重叠。相反,如果发生重叠,我想等待上一次执行的终止,并在上一次完成后立即开始新的操作。
获得这种行为的最佳实现是什么?我应该从 Timer 切换到另一个支持吗?它是 Android 环境,所以我更喜欢 Java 标准 ( util.concurrent
) 或一些基于 Android 的实现,而不是基于 Spring Quartz 和其他特定框架的其他实现。