java - ScheduledExecutorService 可以提前吗?
问题描述
如果正好是 2:00 并且我告诉 Java ScheduledExecutorService 在一分钟内执行任务,那么该任务是否有可能在系统时钟达到 2:01 之前甚至一纳秒开始执行?
解决方案
首先是几个定义:
- 精度 - 值中的小数位数
- 准确度 - 测量值与其“真实”值之间的差异(对于任何被认为“真实”的值)
您在 PC 上找到的任何时钟都没有纳秒级精度。那么问题是“相对于什么的准确性”?
请记住,光在一纳秒内传播约 1 英尺(电信号约为其一半),因此由于相对论,这里的 2:00:00.000000000 与其他地方的时间不同,甚至穿过房间(或穿过主板,对于这个问题)。
你能以纳秒精度计时吗?可能没有极其昂贵的硬件。您依赖于操作系统以零延迟更新内部时钟,这可能涉及从罕见的闰秒到内部时钟漂移调整的所有内容,这可能会使时钟运行得更快或更慢以跟上外部时间信号(请参阅网络时间协议)。
因此,总而言之,不能保证 1 分钟的延迟完全等于 60.000000000 秒,尽管您可能可以指望毫秒精度(除非间隔跨越闰秒)。它可能会超过60 秒,但也可以缩短间隔。
推荐阅读
- php - PHP Telegram Bot 多次发送相同的消息
- fossil - FOSSIL:结帐树之外的文件
- c# - 如何仅将旧 DataTable 的所需行复制到具有不同结构的新 DataTable 行?
- node.js - 使用不同的用户角色在passport-jwt中设置身份验证很热门?
- python - 变量和字符串浓度混淆
- powershell - 我可以将两个参数传递给管道吗?
- amazon-web-services - 如何为 Java SDK 查询执行指定 Athena 查询结果文件的 Content-Type?
- c# - 删除子文档mongodb c#的问题
- spring - Spring JTA Atomikos 仅消耗 7 条消息并全部出列
- javascript - 在输入框中输入时如何在字符串中插入换行符