Мне был присвоен код, он создает уникальный идентификатор, основанный на имени пользователя и типе службы. Уникальный идентификатор находится в db, db читается через классы DAO, которые я не вижу. для создания идентификатора требуется много шагов.Синхронизация Java со значениями db
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 является локальной переменной –
, если я вызываю getIdViaDAO с тем же пользователем и сервисом снова и снова (используя один поток), всегда ли я получаю тот же ID? кроме того, любая другая комбинация пользовательской + службы будет генерировать другой идентификатор? – chahuistle