Sil*_*ing 10 java time uniqueidentifier
我在Java中使用System.currentTimeMillis()(返回一个long整数)来为数据库实体生成一个唯一的ID,因为我认为这些时间在任何时候都不可能重叠.
这是一个安全的假设吗?
例如,目前我得到了这个:
1296691225227
Run Code Online (Sandbox Code Playgroud)
tem*_*def 16
不,这不安全.一个毫秒是CPU周期中的长时间(它们以每秒数十亿个周期运行,而不是数千个),因此如果一次有多个请求进入,或者如果多个线程都尝试创建数据库条目,则它们将看到相同的CPU时间和将以碰撞键结束.如果系统时钟以某种方式重置或更改为较早时间,您也会遇到麻烦.
ska*_*man 10
你不太可能发生冲突,是的(除非你处于高负荷系统,在这种情况下很可能),但仍有可能.
但是,Java有一种生成唯一标识符的现有机制 - java.util.UUID.它有生成随机ID的方法.
我强烈建议使用它.