我需要在
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毫秒进行,直到时间赶上.
原文地址:https://www.jb51.cc/java/125172.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。