Instant.toEpochMilli()可以用作唯一ID吗?

时间:2018-09-26 09:38:05

标签: java uniqueidentifier java.time.instant

我必须生成一个可读的唯一ID,因此不能使用UUID。所以我想到了使用Instant.toEpochMilli()。可以用作唯一ID吗?

3 个答案:

答案 0 :(得分:4)

否。我个人遇到了两个对象具有相同ID的情况。我已经测试过System.nanoTime(),它看起来还可以,但是通常情况下,这两种版本都不正确。

正确的解决方案:

  • UUID.randomUUID()
  • AtomicLong
  • 数据库序列

答案 1 :(得分:0)

  

可以用作唯一ID吗?

只有您可以确定不会在同一毫秒内分配两个ID,这似乎不太可能。毫秒对于人类来说确实是很短的时间,但是对计算机来说不是不是短暂的时间,

如果您在给定的运行时环境中执行此操作,而不必在之间环境中具有唯一的ID,则只需使用一个不断增加的数字即可(如果该数字只需要位于在运行过程中,这可以只是一个静态字段,可以根据需要在某个位置递增;跨进程但在相同的总体环境中,数据库序列或类似的对象;等等)。如果在环境之间必须唯一,那么您确实需要使用GUID或类似的工具。

答案 2 :(得分:0)

它以毫秒为单位生成当前时间。好吧,在大多数情况下,这还不够好。因为如果两次调用此方法之间的超时时间太短(例如:在循环中调用它),则可能会被重复。您可能要看一下生成纳秒的时间(例如 System.nanoTime())。 综上所述,不建议使用millisec或nano sec作为唯一ID。但是在某些特定的松散情况下,可以接受。