java - 如何在 Java 中创建 64 位唯一整数

标签 java random 64-bit long-integer uuid

我需要在 Java 中创建一个 64 位唯一整数,以降低冲突几率。该系统不是分布式的,因此不同计算机之间的冲突不是问题。

有什么办法,我们可以在 Java 中创建一个始终唯一的 64 位整数?

截至目前,我正在使用 -

long number = System.nanoTime();

这是在 Java 中生成 64 位唯一整数的正确方法还是我可以尝试其他方法?

更新:-

这样做怎么样?这会是独一无二的吗?

UUID number = UUID.randomUUID();
long uniqueNumber = number.timestamp();

最佳答案

如果您需要数字在一个进程中是唯一的,并且在重新启动之间保持稳健,您可以使用一个简单的 AtomicLong 和一个计时器。

private static final AtomicLong TS = new AtomicLong();
public static long getUniqueTimestamp() {
    long micros = System.currentTimeMillis() * 1000;
    for ( ; ; ) {
        long value = TS.get();
        if (micros <= value)
            micros = value + 1;
        if (TS.compareAndSet(value, micros))
            return micros;
    }
}

这将为您提供精确到毫秒的唯一“时间戳”,但每毫秒只能处理 1000 个 ID,而不会超前于实际时间。这在重新启动时工作正常,因为时间会跳过以前的值(再次假设平均每秒少于一百万)

关于java - 如何在 Java 中创建 64 位唯一整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370747/

相关文章:

java - 当我在 Android Studio 上从 github pull 时,代码发生更改时出现问题吗?

java - 如何使用自上而下的方法构建 REST Web 服务?

C++ - 从/dev/urandom 中提取随机数

java - LibGDX android在屏幕中生成随机位置

升级到Snow Leopard后的Mysql2 gem问题

c# - 为什么 'Any CPU' 应用程序在 x64 机器上以 x86 运行?

java - 在java中显示二维数组

java - 使用 ComboBox 更改面板的背景颜色

c++ - rand() 可以用来生成可预测的数据吗?

python - 考虑python发行版wx