Почему 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).

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