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