"invariant" की एक साधारण परिभाषा: ऐसी स्थिति जो किसी ऑब्जेक्ट के जीवनकाल के दौरान हमेशा सत्य होती है।
Volatile variables do not share the atomicity features of synchronized
blocks.
यही कारण है कि आप उन वर्गों के भीतर उनका उपयोग नहीं कर सकते हैं जिनमें कई चर शामिल हैं।
उदाहरण के लिए कल्पना करें कि आपके पास class
है जो दो चर द्वारा वर्णित समय अंतराल का मॉडल करने के लिए है: start
और end
। एक परिवर्तनीय स्थिति यह हो सकती है कि start
end
से हमेशा कम या बराबर है। यदि दोनों चर (उदाहरण के रूप में) को अस्थिर घोषित किया जाता है तो आप volatile
की दृश्यता सुविधाओं पर भरोसा कर सकते हैं, लेकिन आप यह सुनिश्चित नहीं कर सकते कि परिवर्तन के दौरान दोनों चर शामिल हैं, हमेशा परिवर्तनीय संतुष्ट होता है। सोचें:
public void setInterval(Date newStart, Date newEnd)
{
// Check if inputs are correct
// Here the object state is valid
start = newStart;
// If another thread accesses this object now it will
// see an invalid state because start could be greater than end
end = newEnd;
// Here the object state is valid again
}
इस मामले में आप यह सुनिश्चित करें कि परिवर्तन हर धागा करने के लिए लेकिन दो निर्देश के बीच में वस्तु स्थिति मान्य नहीं हो सकता है दिख रहा है हो सकता है। क्योंकि इसे अन्य धागे से एक्सेस किया जा सकता है (याद रखें यह एक साधारण मामला है, इसलिए यह संभव है लेकिन संभव नहीं है) तो invariant condition "< अंत" शुरू हो सकता है।
यही कारण है कि अस्थिरता का उपयोग किसी भी तरह से परिभाषित पैटर्न के एक (छोटे) सेट के बाहर निराश होता है। एक अस्थिर चर का उपयोग केवल तभी किया जाना चाहिए जब ये शर्तें संतुष्ट हों:
उदाहरण के लिए अभिव्यक्ति int a = i++;
यह नहीं है तो परमाणु नहीं है देखने के एक धागा बिंदु से आप इस तरह एक वर्ग कल्पना कर सकते हैं:
public class MyAtomicInteger
{
public synchronized increment()
{
x = x + 1;
}
private int x;
}
बेशक
यह एक सच्चे impleme मौजूद है AtomicInteger
का ntation और यह पैकेज java.util.concurrent.atomic का हिस्सा है, यह लॉक-फ्री समवर्ती प्रोग्रामिंग के लिए कुछ सरल बुनियादी दिनचर्या प्रदान करता है।
स्रोत
2012-03-26 08:40:30
कुछ और संदर्भ उपयोगी होंगे, अन्यथा मैं अनुमान लगाऊंगा कि इसका क्या अर्थ हो सकता है। –
क्षमा करें, मैंने अब संदर्भ जोड़ा है –
मेरी पुस्तक में यह 39 पृष्ठ – gstackoverflow