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

问题描述 投票:6回答:2

我正在使用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代码。我不喜欢这样。

任何人都知道一种防故障方法来实际观察随机字符串。

java multithreading uuid
2个回答
3
投票

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


0
投票

您可以尝试这样的事情

© www.soinside.com 2019 - 2024. All rights reserved.