生成唯一的id java(不超过64位)

时间:2012-01-19 16:24:41

标签: java

什么是在java中生成long类型的唯一id的最佳方法,不一定是随机的。经过一些建议使用uuid或vmid的论坛,但它们超过64位限制。任何其他产生唯一身份证的方式?

3 个答案:

答案 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位)

相关问题