5

मेरे प्रोग्राम में ओपनजीएल रेंडरिंग थ्रेड और डेटा संशोधन थ्रेड है। प्रतिपादन धागा डेटा को ArrayLists के एक गले में एक्सेस करता है, जबकि डेटा संशोधन धागा ArrayLists को ऑब्जेक्ट्स को हटा देता है, हटा देता है और जोड़ता है। थ्रेड प्रति सेकेंड 60 गुना अद्यतन करते हैं, और ऐरेलिस्टिस्ट मैनिपुएशन प्रोग्राम की बाधा है। मैंने सिंक ब्लॉक (सुपर धीमी), CopyOnWriteArrayLists (काफी धीमी), और प्रतिपादन धागे (तीन बुराइयों में से कम) में बफर ArrayLists बनाने की कोशिश की है। समवर्ती ArrayLists से अधिकतम दक्षता प्राप्त करने के लिए 'सर्वश्रेष्ठ' तरीका क्या है?जावा - एक ArrayList सिंक्रनाइज़ करने का सबसे प्रभावी तरीका क्या है?

+1

आपको "ArrayLists की गड़गड़ाहट" के एल्गोरिदम और टोपोलॉजी के बारे में और बताना होगा। – jmg

+1

क्या आपने 'ConcurrentHashMap' या' ConcurrentSkipListMap/Set' का लाभ उठाने पर विचार किया है? –

+1

क्या आपने java.util.concurrent पैकेज को सिंक ब्लॉक के विकल्प के रूप में देखा है? – Yoni

उत्तर

1

सबसे अच्छा तंत्र जीएल थ्रेड और कतार संचालन में अपना काम निष्पादित करना है। यदि सूची तक पहुंचने वाला केवल एक धागा है, तो कोई समस्या नहीं है।

+0

प्रोग्राम लॉजिक को ग्ल्रेड थ्रेड में माइग्रेट करना सबसे अच्छा क्यों है? –

+1

आप जीएल राज्य के साथ मिल रहे हैं। जीएल थ्रेड में सभी राज्य मकिंग-के साथ किया जाना चाहिए। इतना ही आसान। –

+0

मैंने अभी 3 दिनों पहले प्रोग्रामिंग जीएल प्रोग्रामिंग शुरू कर दी है। मैं जीएल राज्यों पर पढ़ूंगा। लेकिन जब भी जावा स्विंग था, तब भी समस्या का सार वही रहता है, नहीं? मैं इस के लिए एक जीएल विशिष्ट सवाल होने का इरादा नहीं था। –

3
List<YourObject> syncList = Collections.synchronizedList(yourList); 
+4

मैं इस समाधान के बारे में बेहद थक गया हूं। सबसे पहले, जब इटरेटर का उपयोग किया जाता है तो संग्रह मैन्युअल रूप से सिंक्रनाइज़ किया जाना चाहिए, और अन्य समस्याएं भी हो सकती हैं। मुझे लगता है कि यह प्रोग्राम तर्क के साथ एक समस्या है। –

+2

यह आपको एक कंबल ऑल-या-कुछ भी समाधान प्रदान नहीं करता है, जहां सवाल – Yoni

+1

-1 लॉक करने की उच्च ग्रॅन्युलरिटी प्राप्त करने की कोशिश करने के बारे में है, यह सवाल का जवाब नहीं देता है। वास्तव में, Collection.synchronized * का उपयोग करना हमेशा संग्रह पर सिंक्रनाइज़ करने के लिए सबसे सस्ता सबसे अक्षम और अक्सर गलत तरीका होता है। यद्यपि यह कभी-कभी "काम पूरा कर सकता है" यह केवल तब अच्छा होता है जब नौकरी वास्तव में कोई फर्क नहीं पड़ता। –

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

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