метод synchrozie get из карты?

#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 . большое спасибо.