java - 调度周期性任务和时钟漂移

标签 java scheduling scheduler clock periodic-task

我想安排一个每隔 X 小时执行一次的周期性任务。我有一个用 Java 编写的服务,我正在考虑创建一个长时间运行的后台线程,只要该服务启动,它就会永远运行。我如何确保我们每 X 小时执行一次任务?主机上的时钟漂移是我应该担心的问题吗?我知道如果 CPU 正在努力工作,时钟滴答的频率可能会改变。

编辑:我正在考虑在我的 spring 配置中添加一个 bean 来启动线程,该线程将定期执行我的任务。

最佳答案

Java 提供了一个 java.util.Timer旨在在后台线程上执行任务的类。其中一种操作模式是“定期重复执行”。可以使用固定延迟和固定速率执行方法,具体取决于您的具体需要。

Java 5 添加了一个 java.util.concurrent.ScheduledThreadPoolExecutorTimer 更灵活的类,但也提供固定延迟和固定速率的执行方法。

如果您需要如此精确的计时而这些都不合适,我不确定 Java 是否是合适的解决方案。您将开始进入实时系统领域。此时,您可能应该寻找其他选择。

关于java - 调度周期性任务和时钟漂移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701312/

相关文章:

python - Heroku 计划任务每​​ 10 分钟运行一次,每小时计划一次

java - 寻找 GSM/CDMA 通话详细记录结构

java - 抑制 ScheduledThreadPoolExecutor 中的冗余作业

java - 如何将属性文件中的所有值作为键传递给 HashMap

IOS - 使后台获取每天只发生一次(不需要特定时间)

c# - Quartz.Net - 从今天开始每季度一次

linux - Ubuntu 中的动态进程调度

linux - linux调度器如何决定一个进程是实时的、交互式的、批处理的

java - 如何覆盖媒体播放器 fragment 中的后退按钮

java - 比较 Hashmap 字符串值和重复项的重复键