在多线程应用程序中生成相同的UUID

尼克·迪夫(Nick Div)

我正在使用UUID.randomUUID()。toString()将唯一值附加到最终存储在数据库中并且对它具有唯一约束的字符串

但是由于我的应用程序是多线程的,因此执行是在生成UUID的同时进行的,最终,将相同的UUID附加到字符串中,并且持久性失败。

有没有更好的方法来生成随机字符串,即故障安全方法。

我尝试调试,当我暂停其他线程并让它们一个接一个地运行时,它运行良好。

我目前正在使用以下代码来使其更加随机,但我不喜欢这种方法。

Random r = new Random();
List<Integer> uniqueNUmbers = new ArrayList<>();
for (int i=0;i<10;i++) {
int x=r.nextInt(9999);
while (uniqueNumbers.contains(x))
x=r.nextInt(9999);
uniqueNumbers.add(x);
} 
String string = String.format("%04d", uniqueNumbers.get(0));

string = uuid + string;

但这就像一个hacky代码。我不喜欢这样。

是否有人知道一种用于实际处理随机字符串的防故障方法。

雷德万

您可以同步uuid生成方法,和/或可以在池开始耗尽时预生成uuid池并在一个线程中生成更多标识符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章