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

我使用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-generation方法,和/或您可以在池开始耗尽时预先生成uuid池并在一个线程中生成更多标识符.

点赞