मैं हाल ही में जावा में एक समवर्ती कार्यक्रम लिख रहा था और खोखले दुविधा में आया था: मान लीजिए कि आपके पास वैश्विक डेटा संरचना है, जो नियमित गैर-सिंक्रनाइज़, गैर-समवर्ती lib जैसे हैश मैप का हिस्सा है। क्या यह अलग-अलग धागे को संग्रह के माध्यम से पुन: स्थापित करने के लिए ठीक है (बस पढ़ना, कोई संशोधन नहीं) शायद अलग-अलग, अंतःस्थापित अवधि यानी थ्रेड 1 आधा रास्ता थ्रूफू हो सकता है जब थ्रेड 2 उसी मानचित्र पर अपना इटरेटर प्राप्त करता है?एक ही मानचित्र पर पुनरावृत्त एकाधिक धागे
उत्तर
यह ठीक है। ऐसा करने की क्षमता इटरेटर के रूप में इस तरह के इंटरफेस बनाने का कारण है। संग्रह पर पुनरावृत्त होने वाले प्रत्येक थ्रेड में इटेटरेटर का अपना उदाहरण होता है जिसमें इसकी स्थिति होती है (उदा। जहां आप अपनी पुनरावृत्ति प्रक्रिया में हैं)।
यह कई धागे एक ही संग्रह पर एक साथ फिर से शुरू करने की अनुमति देता है।
समस्याएं तब उत्पन्न होती हैं जब आप डेटा संरचना पर समवर्ती संशोधन का प्रयास करते हैं।
उदाहरण के लिए, यदि एक धागा मानचित्र की सामग्री पर पुनरावृत्ति कर रहा है, और दूसरा धागा उस संग्रह से तत्वों को हटा देता है, तो आप गंभीर परेशानी के लिए आगे बढ़ेंगे।
यदि आपको सुरक्षित रूप से उस संग्रह को संशोधित करने के लिए कुछ धागे की आवश्यकता है, तो जावा ऐसा करने के लिए तंत्र प्रदान करता है, अर्थात्, ConcurrentHashMap।
वहाँ भी Hashtable, जो HashMap रूप में एक ही इंटरफ़ेस है, लेकिन सिंक्रनाइज़ है, हालांकि यह, उपयोग वर्तमान में सलाह नहीं दी जाती (बहिष्कृत) है, क्योंकि यह प्रदर्शन ग्रस्त है जब तत्वों की संख्या में लंबा होता जाता है (तुलना की जाती है ConcurrentHashMap को जो पूरे संग्रह को लॉक करने की आवश्यकता नहीं है)।
यदि आपके पास ऐसा संग्रह होता है जो सिंक्रनाइज़ नहीं होता है और आपको इसके ऊपर पढ़ने और लिखने के कई धागे होने की आवश्यकता होती है, तो आप इसका सिंक्रनाइज़ संस्करण प्राप्त करने के लिए Collections.synchronizedMap (मानचित्र) का उपयोग कर सकते हैं।
यह ठीक होना चाहिए, जब तक कि कोई लेखक न हो।
यह समस्या readers-writer lock के समान है, जहां एकाधिक पाठकों को डेटा से पढ़ने की अनुमति है, लेकिन उस समय के दौरान जब लेखक के पास "लॉक" होता है। एक ही समय में पढ़ने वाले गुणकों के लिए कोई सहमति नहीं है। [data race केवल तभी हो सकता है जब आपके पास कम से कम एक लिखें]।
उपर्युक्त उत्तर निश्चित रूप से अच्छी सलाह हैं। आम तौर पर, जब आप डेटा संरचना को संशोधित नहीं करते हैं, तब तक जावा को समवर्ती धागे के साथ लिखते समय, आपको उस संरचना को पढ़ने के साथ-साथ कई धागे के बारे में चिंता करने की आवश्यकता नहीं होती है।
क्या आपको भविष्य में एक ही समस्या होनी चाहिए, सिवाय इसके कि वैश्विक डेटा संरचना को समवर्ती रूप से संशोधित किया जा सकता है, मैं जावा क्लास लिखने का सुझाव दूंगा कि सभी धागे संरचना को एक्सेस और संशोधित करने के लिए उपयोग करते हैं। यह वर्ग सिंक्रनाइज़ किए गए तरीकों या ताले का उपयोग करके अपनी स्वयं की समवर्ती पद्धति को लागू कर सकता है। जावा ट्यूटोरियल में जावा की समवर्ती तंत्र का बहुत अच्छा स्पष्टीकरण है। मैंने व्यक्तिगत रूप से यह किया है और यह काफी सीधे है।
- 1. एक ही सीपीयू पर एकाधिक धागे और प्रदर्शन
- 2. एक ही मानचित्र में पाठ की एकाधिक पंक्तियां
- 3. हडोप एक मानचित्र और एकाधिक
- 4. एकाधिक धागे
- 5. एकाधिक धागे
- 6. Google मानचित्र पर एकाधिक मार्कर
- 7. एक ही पंक्ति पर एकाधिक टेबल
- 8. एक ही उदाहरण पर एकाधिक कार्यकर्ता भूमिकाएं
- 9. Highcharts.js - एक ही पृष्ठ पर एकाधिक विषयों?
- 10. एक ही मेज पर एकाधिक विदेशी कुंजी
- 11. एक ही पंक्ति पर रूबी एकाधिक प्रिंट
- 12. mediaelement.js एक ही पृष्ठ पर एकाधिक वीडियो?
- 13. एक ही बॉक्स पर एकाधिक PHP संस्करण
- 14. एकाधिक पृष्ठों पर एक ही मेनू है?
- 15. एकाधिक धागे (पायथन कोम्बू)
- 16. एकाधिक धागे और मेमोरी
- 17. एकाधिक सर्वरों पर जावा धागे वितरित करना?
- 18. एकाधिक धागे या धागे के साथ प्रक्रिया
- 19. दो धागे रोकें एक ही मूल्य
- 20. Matplotlib: एकाधिक धागे में एक साथ प्लॉटिंग
- 21. सिम्पी सेट: अंतराल पर पुनरावृत्त
- 22. एकाधिक घटना डिस्पैच धागे
- 23. एकाधिक धागे को एक साथ चलाना
- 24. PHPExcel एक ही गुण पर एकाधिक गुणों पर एक ही गुण, सामग्री इत्यादि सेट करता है
- 25. सी ++ - धागे और एकाधिक कतार
- 26. एकाधिक सूत्र एक ही समारोह बुला
- 27. क्या एक ही आवेदन में एकाधिक धागे से एक डीएलएल समारोह को कॉल करना सुरक्षित है?
- 28. एकाधिक इंस्टॉल: एक ही pom.xml
- 29. एकाधिक सूत्र एक ही बहु-आयामी सरणी
- 30. Google मानचित्र एक मानचित्र पर दो मार्कर
जैसा कि आप कहते हैं, धागे के अलग-अलग इटरेटर हैं। चूंकि वे साझा नहीं किए जाते हैं, इसलिए कोई समस्या नहीं है। –
धन्यवाद दोस्तों, महान जवाब! – Bober02