Java - 如何避免周期性操作执行重叠

时间:2013-07-03 10:25:21

标签: java android java.util.concurrent

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

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

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

1 个答案:

答案 0 :(得分:0)

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