我正在编写一个类,当调用该类时,它将调用一个方法来使用系统时间生成唯一的 8 字符字母数字作为引用 ID。但我担心在某些时候,可能会在同一毫秒内进行多次调用,从而产生相同的引用 ID。我该如何保护对系统时间的调用免受可能同时调用此方法的多个线程的影响?
最佳答案
系统时间不是唯一 ID 的可靠来源。就是这样。不要使用它。 您需要某种形式的永久源(UUID 使用安全随机,其种子由操作系统提供)
系统时间可能会向后/跳回甚至几毫秒,并完全破坏你的逻辑。如果您只能容忍 64 位,您可以使用 High/Low generator这是一个非常好的折衷方案,或者自己制定食谱:比如自 2012 年初以来的 18 位天数(还有 700 多年的时间),然后来自 SecureRandom 的 46 位随机性 - 这不是最好的情况,从技术上讲它可能会失败,但事实并非如此。不需要外部持久性。
关于java - 如何在 Java 类中同步系统时间访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392732/