यह एक डुप्लिकेट प्रश्न हो सकता है, लेकिन मुझे कोड के इस हिस्से को समरूपता के बारे में एक पुस्तक में मिला है। यह कहा जाता है कि धागे की सुरक्षा के लिए:जावा ConcurrentHashMap क्रिया परमाणुता
ConcurrentHashMap<String, Integer> counts = new ...;
private void countThing(String thing) {
while (true) {
Integer currentCount = counts.get(thing);
if (currentCount == null) {
if (counts.putIfAbsent(thing, 1) == null)
break;
} else if (counts.replace(thing, currentCount, currentCount + 1)) {
break;
}
}
}
मेरे से (संगामिति शुरुआती ') की दृष्टि, धागा t1 और थ्रेड t2 दोनों currentCount = 1
पढ़ सकते हैं। फिर दोनों धागे नक्शे के मूल्य को 2 में बदल सकते हैं। क्या कोई मुझे बता सकता है कि कोड ठीक है या नहीं?
आपको बहुत बहुत धन्यवाद का उपयोग करके अपने खुद के पाश लेखन से बच सकते हैं, मुझे लगता है कि मैं अब समझते हैं। :) –