什么是在java中生成long类型的唯一id的最佳方法,不一定是随机的。经过一些建议使用uuid或vmid的论坛,但它们超过64位限制。任何其他产生唯一身份证的方式?
答案 0 :(得分:4)
最简单的解决方案是使用AtomicLong
private static final AtomicLong COUNTER = new AtomicLong();
如果您希望它在重新启动后仍然是唯一的,您可以使用
private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis()*100000);
这会产生更大的ID,但如果您的时钟显着缩回,它将是独一无二的。 (夏令时不会这样做)
答案 1 :(得分:2)
很抱歉,但根本没有其他(简单)方式:
public enum Counter {
INSTANCE;
private final AtomicLong value = new AtomicLong();
public long generate() {
return value.incrementAndGet();
}
}
随时随地使用:
Counter.INSTANCE.generate();
答案 2 :(得分:2)
怎么样:
java.util.UUID.randomUUID().hashCode()
或
Integer.toHexString(java.util.UUID.randomUUID().hashCode())
(仅限32位)