जावा में, java.util.concurrent.atomic पैकेज कक्षाओं का एक सेट प्रदान करता है जो एकल चर पर लॉक-मुक्त थ्रेड-सुरक्षित प्रोग्रामिंग का समर्थन करता है। इन वर्गों को सामूहिक रूप से परमाणु चर कहा जाता है। सबसे अधिक उपयोग किए जाने वाले परमाणु वर्गों में AtomicInteger , AtomicLong , AtomicBoolean , और AtomicReference शामिल हैं।
परमाणु चर को परमाणु रूप से अद्यतन करने के लिए डिज़ाइन किया गया है, जिसका अर्थ है कि उनके संचालन (जैसे वृद्धि करना, घटाना, या मूल्यों की तुलना करना और सेट करना) एक एकल, अविभाज्य चरण के रूप में किया जाता है। यह सुनिश्चित करता है कि कोई अन्य थ्रेड मध्यवर्ती स्थिति में चर का निरीक्षण नहीं कर सकता है।
उदाहरण: AtomicInteger का उपयोग करना
import java.util.concurrent.atomic.AtomicInteger; public class AtomicExample { private AtomicInteger counter = new AtomicInteger(0); public void incrementCounter() { counter.incrementAndGet(); } public int getCounter() { return counter.get(); } public static void main(String[] args) { AtomicExample example = new AtomicExample(); for (int i = 0; iइस उदाहरण में, AtomicInteger का उपयोग एक काउंटर को बनाए रखने के लिए किया जाता है जिसे असंगतता पैदा किए बिना कई थ्रेड्स द्वारा सुरक्षित रूप से बढ़ाया जा सकता है।
1.2 परमाणुता और धागा सुरक्षा
शब्द "एटोमिसिटी" उन परिचालनों को संदर्भित करता है जो अन्य परिचालनों के हस्तक्षेप की संभावना के बिना एक ही चरण में पूरे किए जाते हैं। मल्टीथ्रेडिंग के संदर्भ में, इसका मतलब है कि एक वैरिएबल अपडेट ऑल-ऑर-नथिंग ऑपरेशन के रूप में होता है। नियमित आदिम प्रकारों के साथ, वेतन वृद्धि (i ) जैसे ऑपरेशन परमाणु नहीं होते हैं, जिसका अर्थ है कि यदि एकाधिक थ्रेड एक ही चर को एक साथ अपडेट करने का प्रयास करते हैं, तो डेटा भ्रष्टाचार हो सकता है।
उदाहरण: आदिम प्रकारों के साथ गैर-परमाणु संचालन
public class NonAtomicExample { private int counter = 0; public synchronized void incrementCounter() { counter ; } public int getCounter() { return counter; } public static void main(String[] args) { NonAtomicExample example = new NonAtomicExample(); for (int i = 0; iयद्यपि सिंक्रनाइज़ेशन लागू किया गया है, यह दृष्टिकोण थ्रेड विवाद के कारण प्रदर्शन बाधाओं को जन्म दे सकता है। हालाँकि, परमाणु वर्ग बिना लॉक किए परमाणुता सुनिश्चित करने के लिए निम्न-स्तरीय सीपीयू निर्देशों का उपयोग करके इससे बचते हैं।
2. परमाणु और नियमित आदिम के बीच अंतर
अब जब हम समझ गए हैं कि परमाणु चर क्या हैं और वे कैसे कार्य करते हैं, तो आइए देखें कि वे परमाणुता और थ्रेड सुरक्षा के संदर्भ में नियमित आदिम प्रकारों से कैसे भिन्न हैं।
2.1 नियमित आदिम बनाम परमाणु में परमाणुता
नियमित आदिम जैसे int , long , boolean , आदि, स्वभाव से परमाणु नहीं हैं। इन वेरिएबल्स पर संचालन, जैसे मूल्य बढ़ाना या सेट करना, अन्य थ्रेड्स द्वारा बाधित किया जा सकता है, जिससे डेटा असंगत या दूषित हो सकता है। इसके विपरीत, परमाणु चर यह सुनिश्चित करते हैं कि ये ऑपरेशन एकल, निर्बाध चरण के रूप में किए जाते हैं।
उदाहरण: आदिम प्रकारों के साथ दौड़ की स्थिति
public class RaceConditionExample { private int counter = 0; public void incrementCounter() { counter ; } public static void main(String[] args) { RaceConditionExample example = new RaceConditionExample(); for (int i = 0; iइस उदाहरण में, दौड़ की स्थितियों के कारण अंतिम काउंटर मान 1000 नहीं हो सकता है। एकाधिक थ्रेड एक साथ काउंटर तक पहुंच सकते हैं और संशोधित कर सकते हैं, जिससे अप्रत्याशित परिणाम प्राप्त हो सकते हैं।
2.2 नियमित आदिम बनाम परमाणु में थ्रेड सुरक्षा
समवर्ती प्रोग्रामिंग में थ्रेड सुरक्षा एक महत्वपूर्ण विचार है। नियमित प्राइमेटिव को थ्रेड-सुरक्षित होने के लिए स्पष्ट सिंक्रनाइज़ेशन की आवश्यकता होती है, जो बोझिल और त्रुटि-प्रवण हो सकता है। हालाँकि, परमाणु स्वाभाविक रूप से थ्रेड-सुरक्षित हैं, क्योंकि वे अंतर्निहित परमाणु संचालन प्रदान करते हैं।
प्रदर्शन संबंधी विचार
नियमित प्राइमेटिव के साथ सिंक्रोनाइज़ेशन का उपयोग करने से ताले प्राप्त करने और जारी करने के ओवरहेड के कारण प्रदर्शन में बाधाएं आ सकती हैं। दूसरी ओर, परमाणु कक्षाएं बिना ताले के थ्रेड सुरक्षा प्राप्त करने के लिए गैर-अवरुद्ध एल्गोरिदम का उपयोग करके अधिक कुशल समाधान प्रदान करती हैं।
3. निष्कर्ष
जावा में परमाणु चर समवर्तीता को संभालने और डेटा स्थिरता सुनिश्चित करने का एक शक्तिशाली और कुशल तरीका प्रदान करते हैं। वे परमाणुता और थ्रेड सुरक्षा के मामले में नियमित आदिम प्रकारों से काफी भिन्न होते हैं, जो बहु-थ्रेडेड वातावरण में अधिक प्रदर्शन समाधान प्रदान करते हैं।
परमाणु विज्ञान की अवधारणा को समझकर, आप जावा में सुरक्षित और अधिक कुशल समवर्ती कोड लिख सकते हैं। यदि आपके कोई प्रश्न हैं या अधिक स्पष्टीकरण की आवश्यकता है, तो बेझिझक नीचे एक टिप्पणी छोड़ें!
यहां अधिक पोस्ट पढ़ें : जावा में एटॉमिक क्या है? जावा में परमाणुता और थ्रेड सुरक्षा को समझना
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3