बाइटबफर थ्रेड को सुरक्षित करने के लिए मुझे क्या विकल्प चाहिए? यह ज्ञात है कि यह थ्रेड सुरक्षित नहीं है क्योंकि यह सुरक्षित स्थिति, सीमा और कुछ (/ सभी?) विधियां इस आंतरिक स्थिति पर निर्भर करती हैं।जावा के बाइटबफर थ्रेड को सुरक्षित बनाने के विकल्प
मेरे उद्देश्यों के लिए यह पर्याप्त होगा यदि एकाधिक रीड-थ्रेड सुरक्षित हैं, लेकिन अन्य भविष्य के आगंतुकों के लिए मैं जानना चाहता हूं कि इसे पूरी तरह से थ्रेड सुरक्षित बनाने के लिए मुझे कौन सी तकनीक/चाल/जाल जानना है।
क्या मैं मन में है:
- सिंक्रनाइज़ करना या सभी तरीकों के लिए ReadWrite ताले का उपयोग कर। शायद सबसे धीमी दृष्टिकोण (?)
- बाइटबफर को उप-वर्गीकृत करना और स्थायी थ्रेड-बाउंड स्थिति जैसे स्थिति आदि से बचें और आंतरिक विधियों का उपयोग करने के लिए आवश्यक सभी विधियों के अनुसार अपवाद फेंकना। यह उपवास होगा। लेकिन क्या कोई जाल है? (सिवाय इसके कि मुझे सीधे मैप मेमोरी में हेप मेमोरी में पढ़ना होगा ...)
मैं अन्य चाल का उपयोग कैसे कर सकता हूं? मैं कैसे उदाहरणूँगा डायरेक्टबफर के साथ "पढ़ने पर क्लोन बाइट्स" को लागू करें - क्या यह संभव है? शायद एक पूर्ण समाधान में पूर्ण ByteBuffer (ByteBuffer.slice) को टुकड़ा करना होगा?
अद्यतन: क्या के साथ इस question में मतलब है "नकल (जबकि सिंक्रनाइज़) एक नया उदाहरण एक ही मैप किया बाइट्स की ओर इशारा करते प्राप्त करने के लिए"
मैं एक अभिनेता मॉडल का उपयोग करना पसंद करता हूं जहां कोई बाइटबफर केवल एक थ्रेड द्वारा अपडेट किया जाता है (या केवल पढ़ा जाता है)। कारण यह है कि मैंने पाया है कि सिंक्रनाइज़ेशन का ओवरहेड आम तौर पर एकाधिक धागे होने के लाभों से अधिक है। –
धन्यवाद, पीटर! क्या आप टुकड़ा के माध्यम से इसका उपयोग कर रहे हैं? या आप एक ही डेटा तक कैसे पहुंचते हैं? – Karussell
मैं एक टुकड़ा का उपयोग नहीं करता, इसके बजाय मैं एक रैपर का उपयोग करता हूं जो सबकुछ छुपाता है (यहां तक कि तथ्य मैं बाइटबफर का उपयोग कर रहा हूं और मैं असुरफ पर स्विच करना चाहता हूं जो थोड़ा तेज़ है) एक रैपर का उपयोग करने का लाभ यह है कि आप सभी को छुपा सकते हैं विवरणों को कॉल करके स्वाभाविक रूप से विवरणों और अपने "सरणी" तक पहुंचें। यह विशेष रूप से उपयोगी है क्योंकि मेरे पास अरबों तत्वों के साथ सरणी हैं जो एक बाइटबफर में फिट नहीं होंगे। –