【发布时间】:2018-01-07 07:23:04
【问题描述】:
根据this question,Thread.sleep 不一定保证在您指定的持续时间内休眠:它可能会更短或更长。
如果您阅读Thread.sleep 的文档,您会发现对于睡眠的确切持续时间没有强有力的保证。它特别指出持续时间是
取决于系统计时器和调度程序的精度和准确性
这是(故意)模糊的,但暗示不应过分依赖持续时间。
特定操作系统上可能的睡眠持续时间的粒度由线程调度程序的中断周期决定。
在 Windows 中,调度程序的中断周期通常在 10 或 15 毫秒(我相信这是由处理器决定的),但是 可以在软件中请求更高的周期,Hotspot JVM 会这样做 必要时
Source,强调我的
我怎样才能保证睡眠持续时间至少是我指定的值?
【问题讨论】:
-
使线程休眠 x 次的用例是什么?你只是在安排吗?如果是这样,有更好的方法来做到这一点
-
@UserF40 我想到的一个应用程序是限制请求(或其他类型的事件),也就是说,每秒最多 N 个事件。如果您即将发出第 N 个请求,而第一个请求是在不到一秒前发出的,则您需要在发出请求之前等待至少所需的时间。
-
@UserF40 我个人没有用例(如果您查看链接问题的 cmets,您会明白我为什么要问这个问题;))但 Klitos 提到的似乎是合理的。跨度>