我必须生成一个唯一的 Id,它也是可读的,因此不能使用 UUID。所以我想到了使用 Instant.toEpochMilli()。它可以用作唯一ID吗?
3 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
不。我个人遇到过两个对象具有相同 id 的情况。我已经测试过System.nanoTime()
,看起来不错,但在一般情况下,两种变体都不正确。
正确的解决方法:
UUID.randomUUID()
AtomicLong
数据库序列
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
它以毫秒为单位生成当前时间。嗯,在大多数情况下,这还不够好。因为如果此方法的 2 次调用之间的超时时间太短(例如:当您在循环中调用它时),它可能会重复。您可能想看看生成纳秒(例如System.nanoTime())。总而言之,不鼓励使用毫秒甚至纳秒作为唯一 id。但是在一些特殊的松散情况下,是可以接受的。
慕后森
TA贡献1802条经验 获得超5个赞
它可以用作唯一ID吗?
仅当您可以确定不会在同一毫秒内分配两个 ID 时,这似乎不太可能。一毫秒是一个非常短暂的时间来一个人,但它不是一个短暂的时间到计算机,一点都没有。
如果您在给定的运行时环境中执行此操作并且不必在环境之间具有唯一 ID ,则只需使用不断增加的数字即可(如果它只需要在正在运行的进程中,则这可以只是一个静态字段您可以根据需要在某处增加;跨进程但在相同的整体环境、数据库序列或类似的;等等)。如果它必须在环境之间是唯一的,那么您确实需要使用 GUID 或类似的。
添加回答
举报
0/150
提交
取消