在Java中创建一个唯一的时间戳

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

解决方法

这将尽可能接近目前的时间,没有重复.
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毫秒进行,直到时间赶上.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...