java没有获得唯一的时间戳
我正在为要存储的对象生成唯一ID
我把时间戳包括在里面
但是我运行了for循环
for (int i = 0; i < 100; i++) {
long time = Calendar.getInstance().getTimeInMillis();
st = Integer.toHexString((int) time);
System.out.printf("%d %s %d %n", i, st, st.length());
}
我没有得到唯一的答案
我插入了Thread.sleep(15)
,然后它给了我唯一的值
是否有其他方法可以获得唯一值
# 1 楼答案
以下是3种唯一时间戳的方法:
# 2 楼答案
我会使用一个简单的} 更简单,而且是线程安全的。
另一种可能是使用UUID.randomUUID(),但它是UUID,而不是数值
long
或int
^{# 3 楼答案
试试这个
# 4 楼答案
您的循环在两次迭代之间花费的时间少于1ms,因此时间戳不会改变(这就是为什么添加一个sleep调用会给时钟移动时间的原因)
您最好使用库调用,如palacsint建议的那样,或者自己管理UID。执行此操作的可能性包括获取最后发布的ID并递增,尽管这对于多线程有问题