#java #collections #synchronization
#java #Коллекции #синхронизация
Вопрос:
для того, чтобы синхронизировать мой метод получения карты, я использую
myObj = myMap.get("aaa");
if (myobj==null)
synchronize (someObject){
myObj = mymap.get("aaa");
if (myobj==null){
myObj = createNew();
myMap.put(myObj);
}
}
return myObj;
Является ли это способом besdt. дважды запрашивать нулевое условие?
Ответ №1:
синхронизация get
только не очень полезна. get
не изменяет состояние карты. Вам также пришлось бы синхронизировать put
(с тем же object monitor). И вы можете использовать Collections.synchronizedMap(..)
or ConcurrentHashMap
для этого
Обновление: для get amp; then put
вы можете использовать ConcurrentHashMap.putIfAbsent(..)
Комментарии:
1. Извините, я забыл это написать. Только что добавлена строка map put . большое спасибо.