我想安排一个每隔 X 小时执行一次的周期性任务。我有一个用 Java 编写的服务,我正在考虑创建一个长时间运行的后台线程,只要该服务启动,它就会永远运行。我如何确保我们每 X 小时执行一次任务?主机上的时钟漂移是我应该担心的问题吗?我知道如果 CPU 正在努力工作,时钟滴答的频率可能会改变。
编辑:我正在考虑在我的 spring 配置中添加一个 bean 来启动线程,该线程将定期执行我的任务。
最佳答案
Java 提供了一个 java.util.Timer
旨在在后台线程上执行任务的类。其中一种操作模式是“定期重复执行”。可以使用固定延迟和固定速率执行方法,具体取决于您的具体需要。
Java 5 添加了一个 java.util.concurrent.ScheduledThreadPoolExecutor
比 Timer
更灵活的类,但也提供固定延迟和固定速率的执行方法。
如果您需要如此精确的计时而这些都不合适,我不确定 Java 是否是合适的解决方案。您将开始进入实时系统领域。此时,您可能应该寻找其他选择。
关于java - 调度周期性任务和时钟漂移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701312/