synchrozie मानचित्र से विधि मिलता है? जावा, संग्रह, सिंक्रनाइज़ेशन


मेरे मानचित्र को सिंक्रनाइज़ करने के लिए विधि का उपयोग करें

myObj = myMap.get("aaa");

if (myobj==null)
synchronize (someObject){
myObj = mymap.get("aaa");
if (myobj==null){
myObj = createNew();
myMap.put(myObj);

}
}
return myObj;

क्या यह सबसे अच्छा तरीका है। शून्य स्थिति दो बार पूछना?

उत्तर:

जवाब के लिए 2 № 1

सिंक्रनाइज़ करना get केवल बहुत उपयोगी नहीं है। get मानचित्र की स्थिति नहीं बदलता है। आपको सिंक्रनाइज़ करना होगा put (एक ही ऑब्जेक्ट मॉनीटर के साथ)। और आप इसका उपयोग कर सकते हैं Collections.synchronizedMap(..) या ConcurrentHashMap उसके लिए

अद्यतन: के लिए get & then put आप उपयोग कर सकते हैं ConcurrentHashMap.putIfAbsent(..)


संबंधित सवाल
सबसे लोकप्रिय