2012-12-11 19 views
5

त्वरित स्पष्टीकरण कृपयाजावा -BlockingQueue - एकाधिक उत्पादकों, एकल उपभोक्ता

मैं जानता हूँ कि BlockingQueues threadsafe हैं।

क्या इसका मतलब यह है कि मैं सभी उत्पादकों को अवरुद्ध कतार में एक संदर्भ भेज सकता हूं जो एक उपभोक्ता द्वारा उपभोग करने के लिए घटनाओं को छोड़ सकता है, और कुछ भी बाधित नहीं हो जाता है?

अन्यथा 20 BlockingQueues तक उत्पादन करना है जो नियमित अपडेट हो सकता है या नहीं हो सकता है और उन्हें किसी भी दक्षता के साथ पढ़ना एक दुर्बल कार्य लगता है।

उत्तर

5

क्या इसका मतलब यह है कि मैं सभी उत्पादकों को अवरुद्ध कतार में एक संदर्भ भेज सकता हूं जो एक उपभोक्ता द्वारा उपभोग करने के लिए घटनाओं को छोड़ सकते हैं, और कुछ भी बाधित नहीं हो जाता है?

एक शब्द में, हाँ। यह सुरक्षित है। documentation उद्धरण:

BlockingQueue कार्यान्वयन थ्रेड-सुरक्षित हैं। सभी कतारबद्ध विधियां आंतरिक ताले या समवर्ती नियंत्रण के अन्य रूपों का उपयोग करके अपने प्रभावों को परमाणु रूप से प्राप्त करती हैं।

+0

अद्भुत। ऐसा लगता है, लेकिन मैं अब से एक साल में किसी मुद्दे में भागना नहीं चाहता था। – Sheriff

1

यदि यह थ्रेडसेफ है तो इसका मतलब है कि आपको केवल उस कतार के एक उदाहरण की आवश्यकता है जिसे सभी धागे द्वारा एक्सेस किया जा सकता है। समवर्ती डेटा संरचना उन अभिगमों का प्रबंधन करती है। इसका यह भी अर्थ है कि आपकी तरफ से सिंक्रनाइज़ेशन की आवश्यकता नहीं है।

+0

बहुत बहुत धन्यवाद। इस मार्ग पर प्रतिबद्ध होने से पहले बस सुरक्षित रहना चाहता था। अतीत में मैंने हमेशा निर्माता/उपभोक्ता डाया था, लेकिन अब मैं केंद्रीकृत करने की कोशिश कर रहा हूं। – Sheriff

+1

समवर्ती संग्रह भविष्य के लिए जाने का एक बचा तरीका प्रतीत होता है क्योंकि वे भी काफी प्रदर्शन कर रहे हैं;) – Zhedar

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