当前位置: 首页 > 面试题库 >

在Java中创建唯一的时间戳

楮星鹏
2023-03-14
问题内容

我需要在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毫秒的时间进行计时,直到时间赶上。;)



 类似资料:
  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • 问题内容: 我有一个取自文件的值(很多行,这只是一部分): 每行的前两个值是包含数据并存储在单个元素中的字符串。 我想要做的是比较字符串数据元素并删除例如第二行和该行中引用的所有元素。 现在,我使用了一个循环,该循环每13个元素比较一次字符串(以便仅比较数据字符串)。 我的问题:我可以实施其他更好的解决方案吗? 这是我的代码: 问题答案: 创建唯一值的数组列表 您可以使用方法。 不包含重复元素的集

  • 问题内容: 我知道在Java中不设置创建时间戳记是因为Linux没有它,但是有没有办法在Java中设置文件(Windows)的创建时间戳记?我在这里做了一个基本的修改时间戳编辑器。 问题答案: 我相信您有以下选择: 查找可以执行此操作并且可以从命令行调用的工具。然后,您可以通过Java代码与之交互。 以下来自MSDN File Times的链接显示了任何工具的工作方式-特别注意功能和。 在这里,我

  • 我知道这是一个可怕的黑客行为,但我需要编辑一个外部库以符合我们项目的需要。我正在更改的项目将类映射存储到所述类的实例。这个项目的初衷是不可能有重复的类,但我需要它们。我的解决方案是对每个相关对象应用一个UniqueClass字段,然后每个对象都有一个对我需要创建其实例的类的引用。这样,UniqueClass是什么其实根本不重要,只是它是唯一的。 现在,我需要一种方法在运行时创建一个唯一的类来存储在

  • 问题内容: 我创建了以下方法,以便创建唯一的随机数。(此唯一值属于树的节点): 但这并不会创建唯一的数字,并且我的列表中仍然有重复的数字。喜欢 : 问题答案: 问题是,如果它发现重复的数字,您不会在检查函数中停止for循环。循环继续进行,b可以变回true。 例如,您应该做的是:

  • 因此,我的任务是创建一个 Time 类,该类保存一小时值和一分钟值来表示时间。我将使用“军事时间”,因此12:01 am是0001,1 pm是1300。我可以假设有效的军事时间范围从0000到2359。有效标准时间范围为上午 12:00 至晚上 11:59。时间应包括两个构造函数: Time() -将时间设置为1200的默认构造函数。Time(int h,int m) -如果h介于1和23之间,则