在Java中创建唯一的时间戳

我需要在Java中创建一个时间戳(以毫秒为单位),以确保在特定的VM实例中是唯一的。即需要某种方式来限制System.currentTimeMillis()的吞吐量,以便它每毫秒最多返回一个结果。关于如何实施的任何想法?

回答:

这样可以使时间尽可能接近当前时间,而不重复。

private static final AtomicLong LAST_TIME_MS = new AtomicLong();

public static long uniqueCurrentTimeMS() {

long now = System.currentTimeMillis();

while(true) {

long lastTime = LAST_TIME_MS.get();

if (lastTime >= now)

now = lastTime+1;

if (LAST_TIME_MS.compareAndSet(lastTime, now))

return now;

}

}

避免每毫秒限制一个id的一种方法是使用微秒级的时间戳。例如,将currentTimeMS乘以1000。这将允许每毫秒1000个id。

注意:如果时间倒退(例如由于NTP校正),则每次调用仅以1毫秒的时间进行计时,直到时间赶上。;)

以上是 在Java中创建唯一的时间戳 的全部内容, 来源链接: utcz.com/qa/402599.html

回到顶部