2013-03-31 8 views
5

मैं विशिष्ट लेखन कैसे प्राप्त कर सकता हूं, लेकिन अनन्य पढ़ने? क्या मैं synchronize एक सेटर तक पहुंच सकता हूं और एक चर volatile बना सकता हूं? क्या यह पर्याप्त है? Java5 समवर्ती एपीआई परअनन्य लेखन कैसे प्राप्त करें, लेकिन अनन्य पढ़ने?

+1

किस प्रकार का चर है? कुछ प्रकारों पर परमाणु लिखने की गारंटी है। –

+1

क्या आप कोड का एक उदाहरण दिखा सकते हैं जिसके लिए इसकी आवश्यकता है? कुछ परिस्थितियों में, आप बस परिवर्तनीय अस्थिर चिह्नित कर सकते हैं। – assylias

उत्तर

6

देखो:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html

यह आपकी आवश्यकता प्राप्त होगा जब से तुम लॉक के बिना कई धागा पढ़ने की अनुमति है और केवल ताला लगा जब लिख सकते हैं।

यहाँ एक रोचक पोस्ट पारंपरिक जब पढ़ने सिंक्रनाइज़ के साथ इस एपीआई की तुलना: ReentrantReadWriteLock vs synchronized

इसके अलावा, के रूप में @assylias टिप्पणी में कहा, आप ताला लगा जब यह वास्तव में आवश्यक नहीं है से बचना चाहिए।

दरअसल, आप volatile कीवर्ड केवल और केवल भरोसा कर सकते हैं अगर दोनों शर्तें पूरी की जाएं:

आप केवल परिस्थितियों की एक प्रतिबंधित सेट के तहत ताले के बजाय अस्थिर चर का उपयोग कर सकते हैं। निम्नलिखित मानदंडों में वांछित थ्रेड-सुरक्षा प्रदान करने के लिए अस्थिर चर के लिए मुलाकात की जानी चाहिए:

_ चर के लिए लिखना वर्तमान मूल्य पर निर्भर नहीं है।

_ चर अन्य चर के साथ इनवर्तकों में भाग नहीं लेता है।

+1

उपयोग के मामले के आधार पर, लॉकिंग और अस्थिर उपयोग करने के लिए यह अनावश्यक हो सकता है पर्याप्त हो सकता है। – assylias

संबंधित मुद्दे