首页 > 解决方案 > ScheduledExecutorService 可以提前吗?

问题描述

如果正好是 2:00 并且我告诉 Java ScheduledExecutorService 在一分钟内执行任务,那么该任务是否有可能在系统时钟达到 2:01 之前甚至一纳秒开始执行?

标签: javaexecutorservicescheduledexecutorservice

解决方案


首先是几个定义:

  • 精度 - 值中的小数位数
  • 准确度 - 测量值与其“真实”值之间的差异(对于任何被认为“真实”的值)

您在 PC 上找到的任何时钟都没有纳秒级精度。那么问题是“相对于什么的准确性”?

请记住,光在一纳秒内传播约 1 英尺(电信号约为其一半),因此由于相对论,这里的 2:00:00.000000000 与其他地方的时间不同,甚至穿过房间(或穿过主板,对于这个问题)。

你能以纳秒精度计时吗?可能没有极其昂贵的硬件。您依赖于操作系统以零延迟更新内部时钟,这可能涉及从罕见的闰秒到内部时钟漂移调整的所有内容,这可能会使时钟运行得更快或更慢以跟上外部时间信号(请参阅网络时间协议)。

因此,总而言之,不能保证 1 分钟的延迟完全等于 60.000000000 秒,尽管您可能可以指望毫秒精度(除非间隔跨越闰秒)。它可能会超过60 秒,但也可以缩短间隔。


推荐阅读