क्या AtomicInteger सिंक्रोनाइज़ेशन को हैंडल करता है?

Aug 17 2020

अगर i ++int i का उपयोग करके दोनों थ्रेड्स समान रूप से बढ़ते हैं , तो हमें एक समस्या हो सकती है, क्योंकि i ++ परमाणु ऑपरेशन नहीं है। यही कारण है कि वहाँ है , जो वृद्धि परमाणु बनाता है। इसलिए यदि हमारे पास 1 कोर और 2 धागे हैं , तो कोई समस्या नहीं हो सकती है (क्योंकि इसे ऑपरेशन के बीच में निलंबित नहीं किया जा सकता है)।AtomicInteger.increment().increment()

लेकिन क्या होगा अगर हमारे पास 2 कोर और 2 धागे थे और वे समानांतर रूप से (ठीक उसी समय) कॉल करते हैं increment()?

वहाँ संभावना है कि वे एक ही मूल्य लोड हो सकता है int i? मतलब अगर 1int i था , तो अंतिम परिणाम 2 और 3 नहीं होगा । उस मामले में हमें परवाह नहीं है अगर यह परमाणु ऑपरेशन है क्योंकि वे दोनों एक ही समय में एक ही मूल्य लेते थे।

नीचे पंक्ति: सिंक्रनाइज़ेशन AtomicInteger द्वारा नियंत्रित किया जाता है?

जवाब

3 Joni Aug 17 2020 at 12:04

वहाँ संभावना है कि वे एक ही मूल्य लोड हो सकता है int i?

हाँ, वहाँ है, लेकिन यह आपके लिए है।

incrementAndGetविधि एक परमाणु "की तुलना करने और सेट" आपरेशन कि सेट वृद्धि मान का उपयोग करता है, लेकिन केवल एक नया मान पहले से ही सेट नहीं था अगर । यदि तुलना विफल हो जाती है, incrementAndGetतो नया मान प्राप्त करता है और फिर से कोशिश करता है।

शुद्ध प्रभाव है, यह incrementAndGetकई धागे से उपयोग करने के लिए सुरक्षित है ।