7
votes

Même uuid étant généré dans une application multi-threadé

J'utilise l'UUID.RANDOMUUID (). TOSTRING () Pour ajouter une valeur unique à une chaîne qui est finalement stockée dans la base de données et a une contrainte unique sur celle-ci

​​mais parce que ma demande est multi-filetée de l'exécution. arrive au même moment de la génération UUID et, finalement, le même uuid est annexé à la chaîne et à la persistance échoue. P>

Y a-t-il un meilleur moyen de générer une chaîne aléatoire, c'est-à-dire une méthode sans échec. P>

J'ai essayé de déboguer et quand j'ai fait pair les autres threads et que je les laisse aller un à un, alors cela fonctionnait bien. P>

J'utilise actuellement le code suivant pour le rendre plus aléatoire mais je n'aime pas cette approche. P>

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;


0 commentaires

3 Réponses :


5
votes

Vous pouvez synchroniser la méthode de génération UUID et / ou vous pouvez prévenir la piscine UUID et générer plus d'identificateurs dans un fil lorsque la piscine commence à épuiser.


0 commentaires

1
votes

Vous pouvez essayer quelque chose comme celui-ci xxx


0 commentaires

0
votes

Peut-être que cet exemple peut aider quelqu'un à l'avenir:

UUID uuid = UuidCreator.getRandomBased();


0 commentaires