所述TimeUnit.sleep(长超时)文档描述了它的参数这样的:
超时 - 最短睡眠时间.
但是,我发现 - 至少在带有Java 8更新141的Windows 7 64位上 - 线程的睡眠时间通常低于最小值:
public static void main(String[] args) throws InterruptedException {
final long from = TimeUnit.MILLISECONDS.toNanos(100);
final long to = TimeUnit.MILLISECONDS.toNanos(1000);
final long step = TimeUnit.MILLISECONDS.toNanos(100);
for (long requestedSleepDuration = from; requestedSleepDuration < to; requestedSleepDuration += step) {
long sleepStartTime = System.nanoTime();
TimeUnit.NANOSECONDS.sleep(requestedSleepDuration);
long sleepEndTime = System.nanoTime();
System.out.printf(
"requested=%9d actual=%9d %s%n",
requestedSleepDuration,
sleepEndTime - sleepStartTime,
(sleepEndTime - sleepStartTime >= requestedSleepDuration ? "OK" : " Slept less than …Run Code Online (Sandbox Code Playgroud)