在java中生成唯一id的最佳方法?

在java中生成唯一id的最佳方法?,java,Java,我想让java类为这些字段生成唯一的id,当用户生成id时,它将始终是unqiue,那么如何在java中实现呢 String dairyId; String userId; String productId; String MerchantId; String couponId; String eventId; 您始终可以使用: UUID的目的是使分布式系统能够 识别没有重大中央协调的信息。在这个 上下文“独特”一词应理解为“实际独特”的意思 而不是“保证独一无二”。由于标识符具有有限的 大小

我想让java类为这些字段生成唯一的id,当用户生成id时,它将始终是unqiue,那么如何在java中实现呢

String dairyId;
String userId;
String productId;
String MerchantId;
String couponId;
String eventId;
您始终可以使用:

UUID的目的是使分布式系统能够 识别没有重大中央协调的信息。在这个 上下文“独特”一词应理解为“实际独特”的意思 而不是“保证独一无二”。由于标识符具有有限的 大小,两个不同的项目可能共享同一个 标识符


因此,不保证不同运行之间的唯一性,但“实际保证”。

UUID idTwo=UUID.randomuid();将提供唯一的ID

而且根据

只有在接下来的100年中每秒生成10亿个UUID之后 几年后,只产生一个复制品的概率约为 50%


当然,UUID是最好的解决方案,但由于Java 8在私人应用程序中,我总是使用:

    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    LocalDateTime localDateAndTime = LocalDateTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss-SSS");
    String uid = localDateAndTime.format(formatter);

这保存了一个单独的日期时间变量,是线程保存,由于
sleep(100)
它保证了
SSS
毫秒部分的唯一性,并且仍然是一个“人类可读的”UUID。

没有最好的方法。这取决于您的独特性要求。把它们说清楚,也许我们可以回答我想建议Calendar.getInstance().getTimeInMillis()+随你的便:如果用户向我的应用程序注册,然后随机为他创建一个id,那么如果两个不同的运行程序同时执行代码,它们将具有相同的uid
Thread.sleep(100)
对唯一性提取没有帮助,只会在相同的时间内延迟两个程序。
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    LocalDateTime localDateAndTime = LocalDateTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss-SSS");
    String uid = localDateAndTime.format(formatter);