java - 如何在 Java 类中同步系统时间访问

标签 java time system synchronized

我正在编写一个类,当调用该类时,它将调用一个方法来使用系统时间生成唯一的 8 字符字母数字作为引用 ID。但我担心在某些时候,可能会在同一毫秒内进行多次调用,从而产生相同的引用 ID。我该如何保护对系统时间的调用免受可能同时调用此方法的多个线程的影响?

最佳答案

系统时间不是唯一 ID 的可靠来源。就是这样。不要使用它。 您需要某种形式的永久源(UUID 使用安全随机,其种子由操作系统提供)

系统时间可能会向后/跳回甚至几毫秒,并完全破坏你的逻辑。如果您只能容忍 64 位,您可以使用 High/Low generator这是一个非常好的折衷方案,或者自己制定食谱:比如自 2012 年初以来的 18 位天数(还有 700 多年的时间),然后来自 SecureRandom 的 46 位随机性 - 这不是最好的情况,从技术上讲它可能会失败,但事实并非如此。不需要外部持久性。

关于java - 如何在 Java 类中同步系统时间访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392732/

相关文章:

php - 连续将数据存储到数据库,无需按 'Submit' og 'Next'

arrays - 当i为外循环且内循环以j=i+1开始时双循环的时间复杂度

java - 如何检测托盘是否已经运行或禁用多次运行

unix - Linux命令获取java.io.tmpdir的当前值

java - 使用 JWNL 与 WordNet 进行词干分析 - 无法安装词典

java - 我的随机数生成器没有达到我的预期

C# 没有用 .AddYears(1) 添加一年;

java - 无法使用 HashMap 替换方法 : call require api level 24 (current min is 22):java. util.HashMap#replace

java - 在 Java 中是否有折叠多个事件的标准技术和/或示例?

c++ - 调用 system() 的行为与在命令提示符 (cmd) 中的行为不同