Вот только некоторые наблюдения:
- Синхронизация на
String
- очень плохая идея -> синхронизация на clusterKey
и serverKey
, вероятно, не будет работатьпуть намечен. - Лучше было бы использовать
ConcurrentHashMap
s и ConcurrentHashSet
s.
Хотя без большего контекста на самом деле невозможно ответить на этот вопрос.Кажется, что автор кода хотел безопасно создать только 1 сопоставление на clusterKey
и serverKey
, чтобы пользователь мог быть добавлен только один раз.
(возможно, лучше) было бы просто synchronize
наclusters
сама карта, и тогда вы в безопасности, поскольку только один поток может читать и / или записывать на указанную карту.
Другой способ - использовать пользовательские Lock
s, возможно, один для чтения, идругой для записи, хотя это может снова привести к несоответствиям, если один поток записывает в Map
, в то время как другой читает это точное значение из него.