हाल ही में मैं एक ट्यूटोरियल पढ़ रहा था, कि मैं एक बयान है कि कहते हैं भर में आया था ..परमाणु संचालन और multithreading
"जावा भाषा विनिर्देश गारंटी देता है कि पढ़ने या एक चर लेखन एक परमाणु ऑपरेशन है (जब तक चर रहा है long
या double
टाइप करें) long
या double
के संचालन चर केवल तभी परमाणु हैं जब उन्होंने volatile
कीवर्ड के साथ घोषित किया। "
AtomicInteger
या AtomicLong
कि getAndDecrement()
, getAndIncrement()
और getAndSet()
जो परमाणु कर रहे हैं की तरह तरीकों प्रदान करता है।
मैं उपरोक्त कथन से थोड़ा भ्रमित हो गया .. और आप कृपया स्पष्ट सकता है जबAtomicInteger
या AtomicLong
वर्गों का उपयोग करने के।
फिर हमें 'अस्थिर' का उपयोग क्यों करना होगा, अगर हम "डबल" या "लंबे" प्रकार के चर पर संचालन करते हैं? – MaheshVarma
यदि आप एक AtomicXxx का उपयोग करते हैं, तो आपको अस्थिरता का उपयोग करने की आवश्यकता नहीं है, क्योंकि परमाणु वस्तुएं अस्थिरता से अधिक गारंटी प्रदान करती हैं। एक अस्थिर पूर्णांक पर 'ए ++' करने से ऑपरेशन परमाणु नहीं होता है। यह केवल गारंटी देता है कि एक और धागा बढ़ने के बाद के नए मूल्य को देखेगा। लंबे या दोहरे मूल्यों के लिए नए मान निर्दिष्ट करते समय, यह भी गारंटी देता है कि लेखन एक परमाणु संचालन है (क्योंकि एक गैर-अस्थिर लंबे या दोहरे चर के लिए लिखना 4 बाइट लिखने में होता है, फिर अन्य 4 बाइट लिखते हैं)। सामान्य रूप से अस्थिर चर के ऊपर परमाणु वस्तुओं को पसंद करें। –
'ए = 28' परमाणु होने की गारंटी नहीं है यदि' ए' लंबा या दोहरा है, जब तक कि यह भी अस्थिर न हो। – assylias