如何以常规(!)间隔创建每秒执行约 10000 次的循环?
(从 Java 中的并行端口连续获取数据的副本,但很难找到,没有答案,而且很旧)
我看了看,Thread.sleep(long millis)
但Thread.sleep(long millis, int nanos)
Windows 上的 Oracle J2SE 虚拟机的睡眠时间总是比我指定的时间长 1 毫秒。此外, nanos 字段似乎被四舍五入到下一个整毫秒(已验证,这是在 Thread.java 的源代码中硬编码的)。
实验结果:
Thread.sleep(0)
不睡觉(100% cpu)Thread.sleep(1)
平均睡眠 1.95 毫秒Thread.sleep(2)
平均睡眠 2.95 毫秒Thread.sleep(0, 0)
不睡觉(100% cpu)Thread.sleep(0, 1)
平均睡眠 1.95 毫秒
那么,我怎样才能创建一个循环以固定间隔每秒迭代超过 500 次呢?
编辑:我稍微放宽了“常规”要求。如果一个延迟比另一个延迟短 4 倍(即抖动不是问题),这不是一个大问题,只要最长延迟是确定性的并且低于 0.1 毫秒。(情况并非如此ScheduledExecutorService
)