Мне дали код, он создает уникальный идентификатор на основе имени пользователя и типа сервиса.
Уникальный идентификатор находится в db, db читается через классы DAO, которые я не вижу. создание идентификатора занимает много шагов.
create(user,service) {
id=getIdViaDAO(user,service)
if(id==null) {
create few classes and call few methods.
id=generareId(few objects)
session.setId(id)
dao.createSession(session)
}
return id
}
В многопоточной среде нет гарантии для уникального идентификатора.
Для гарантии уникальности
Решение: Я бы кэшировал идентификатор в ConcurrentHashmap с сервисом userId + в качестве ключа и id в качестве значения. Всякий раз, когда метод вызывается, я проверяю значение (id), если нет блокировки на ключ и создаю идентификатор. Это уменьшит конкуренцию и гарантирует уникальность.
Хотите знать, есть ли какая-либо проблема в моем решении и / или есть ли лучшее решение для этого?