延迟1毫秒不工作?

时间:2014-07-24 04:26:42

标签: java

我正在尝试使用以下方式生成数字:

System.currentTimeMillis()

我必须连续5次生成这些数字,这种数字发生得太快以至于它们是相同的(但我不希望它们与我们将它们作为唯一字段的一部分使用相同)< / p>

我以为我可以在生成每一个之间延迟,这会阻止它们相同,使用:

TimeUnit.MILLISECONDS.sleep(1);

但这仍然会产生相同的数字。如果我把它增加到60左右,它似乎只会生成一个新的。我想知道为什么会这样?感谢

4 个答案:

答案 0 :(得分:8)

如果你想从当前时间开始生成5个不相同的数字 - 这是可以告诉你的唯一要求 - 你可以使用

long t = System.currentTimeMillis();

long ts[] = { t, t+1, t+2, t+3, t+4 };

Thread.sleep在这里很荒谬。用户(或任何人)不应该对现在可以计算的东西感到延迟。

答案 1 :(得分:4)

Thread.sleep()的Java文档说:

 Causes the currently executing thread to sleep (temporarily cease execution) for the
 specified number of milliseconds, subject to the precision and accuracy of system
 timers and schedulers.

关于“系统定时器和调度程序的精度和准确性”的这一点非常重要。我会说这就是为什么在使用Thread.sleep(60)之前你没有得到任何东西:那些系统计时器不是很准确。

现在一个更好的问题是为什么你想要“生成数字......”

答案 2 :(得分:0)

JavaDoc for System.currentTimeMillis()说:

 "Note that while the unit of time of the return value is a millisecond,
  the granularity of the value depends on the underlying operating system
  and may be larger. For example, many operating systems measure time in
  units of tens of milliseconds."

由此,您的问题可能与Java无关,而是您的操作系统不能保持每毫秒的时间。

答案 3 :(得分:-2)

Thread.sleep保证Thread会休眠,但不会保持多长时间。它肯定会睡觉,至少1毫秒,但你的操作系统可能不会优先考虑jvm,或者jvm可能在1毫秒后没有优先考虑线程。