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

标签 java android java.util.concurrent

我的应用程序中需要执行一些周期性操作,例如周期T。目前,我使用的是 Timer.scheduleAtFixedRate(TimerTask, 0, T)。现在我想避免单个操作的重叠(在某些情况下,单个操作可能比 T 花费更多时间)。我读过 Timer 实现使用单个线程来执行操作,因此在标准情况下不会有重叠。问题是,在我的例子中,单个操作不是由传递给 Timer 的 TimerTask 直接执行的:操作仅从它开始,并且是异步执行的。 p>

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

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

最佳答案

您可以使用Executors.newScheduledThreadPool(1)为了达成这个。它比 Timer{,Task} 使用起来容易得多。

关于Java - 如何避免周期性操作执行重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445532/

相关文章:

java - 面向多数据库 Java/hibernate 开发人员的廉价/免费查询工具

java - egl_emulation eglsurfaceattrib 未使用流媒体播放器实现

java - Android 上的 YouTube 客户端出现 java.lang.NullPointerException

java - java中Executor和ExecutorCompletionservice的区别

java - ConcurrentHashMap compute() 方法线程安全吗?

java - 我将如何浓缩这些方法?

java - 为什么 return 在 java 中表现不同?

android - 如何提取 AsyncTask 的返回值?

java - 如果多个 JVM 或容器访问共享内存,如何在 Java 中实现线程安全?

java - excel无法设置单元格数据