Почему HashMap.get(key) необходимо синхронизировать при синхронизации операций изменения?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Почему HashMap.get(key) необходимо синхронизировать при синхронизации операций изменения?

Сообщение Гость »


Я использую операции .get(...), .put(...) и .clear() из нескольких потоки на одном HashMap. .put(...) и .clear() находятся внутри блока synchronized, но .get(...)< /код> нет. Я не могу себе представить, что это вызовет проблемы, но в другом коде, который я видел, .get() почти всегда синхронизируется.

соответствующий код для получения/вставки

Значение объекта = map.get(key); если (значение == ноль) { синхронизировано (карта) { значение = map.get(ключ); // проверяем еще раз, возможно, между ними были изменения если (значение == ноль) { map.put(ключ, новое значение(...)); } } } и ясно просто:
синхронизировано (карта) { карта.очистить(); } Операции записи сделают кеши недействительными из-за синхронизации, а get(...) возвращает либо ноль, либо экземпляр. Я не могу понять, что может пойти не так или что можно улучшить, поместив операцию .get(...) в блок synchronized(map).
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»