एक प्रविष्टि में आपरेशन के थ्रेड सुरक्षित-जावा, multithreading, मुद्रा, जावा. util. समसामयिक, concurrenthashmap

मैं ऑपरेशन करना चाहता हूं

class A {
}

ConcurrentHashMap<A, Integer> map = new ConcurrentHashMap<>();

public void fun() {
Integer count = map.get(Object);
if (count != null) {
map.put(Object, count+1);
}
}
public void add() {
// increase Object count by 1
}
public void remove() {
// deduct Object count by 1
}

मैं मजेदार () थ्रेड कैसे सुरक्षित कर सकता हूं?

मुझे सिंक्रनाइज़ ब्लॉक जोड़ने के लिए ऐसा करने का एक तरीका पता है

public void fun() {
synchronized("") {
Integer count = map.get(Object);
if (count != null) {
map.put(Object, count+1);
}
}
}

लेकिन क्या ऐसा करने के अन्य तरीके हैं? या क्या ऐसा करने के लिए कोई पुस्तकालय हैं?

धागा सुरक्षित प्रवेश प्रोसेसर की तरह?


मैं कुछ भी लागू करना चाहता हूं

public void remove() {
int count = map.get(Object);
count -= 5;
if (count <= 0) {
map.remove(Object);
} else {
map.put(Object, count + 2);
}
}

Any ways to do this  ?
Thank you

उत्तर:

उत्तर № 1 के लिए -1

उपयोग AtomicInteger तथा ConcurrentHashMap.putIfAbsent ()

यह भी देखें ConcurrentHashMap.remove (कुंजी, मान) - केवल कुंजी को हटा देता है यदि यह दिए गए मान पर मैप किया गया हो।

मुझे यकीन नहीं है, अगर सटीक तर्क लागू करना संभव है (जो ऊपर दिए गए प्रश्न में बहुत अच्छी तरह से परिभाषित नहीं है), लेकिन वे विधियां कुछ ऐसा करने में बहुत उपयोगी हो सकती हैं।

अधिक संकेत (जो उपयोगी हो सकता है या बहुत अधिक नहीं हो सकता है):

आप (शायद!) विधियों का उपयोग कर सकते हैं: computeIfAbsent, computeIfPresent (या प्रतिस्थापित), और हटाएं (कुंजी, मान)। ConcurrentHashMap मूल्यों पर परिभाषित किया जा सकता है Integers हैं।

यह बहुत गंदे समाधान होगा, और मैं आपको इसका उपयोग करने की सलाह नहीं देता, लेकिन कुछ सोचने के लिए, यह बहुत चुनौतीपूर्ण हो सकता है।

अगर आपको और संकेत चाहिए तो मुझे बताएं।


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