我正在尝试使用以下方式生成数字:
System.currentTimeMillis()
我必须连续5次生成这些数字,这种数字发生得太快以至于它们是相同的(但我不希望它们与我们将它们作为唯一字段的一部分使用相同)< / p>
我以为我可以在生成每一个之间延迟,这会阻止它们相同,使用:
TimeUnit.MILLISECONDS.sleep(1);
但这仍然会产生相同的数字。如果我把它增加到60左右,它似乎只会生成一个新的。我想知道为什么会这样?感谢
答案 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毫秒后没有优先考虑线程。