2015-07-11 2 views
4

Я использую UUID.randomUUID(). ToString(), чтобы добавить уникальное значение в строку, которая, в конечном счете, хранящейся в базе данных, и имеет уникальное ограничение на немже UUID генерируется в многопоточном приложении

Но поскольку мое приложение многопоточное, выполнение происходит одновременно с генерацией 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; 

Но это как взломанный код. И мне это не нравится.

Кто-нибудь знает метод отказоустойчивости для фактической передачи случайной строки.

ответ

1

Вы можете синхронизировать метод генерации uuid и/или вы можете использовать пул uuid и генерировать больше идентификаторов в одном потоке, когда пул начинает истощаться.

Смежные вопросы