मैं जावा 1.6 में एक वेबपैप लिख रहा हूं और इसे टॉमकैट में चला रहा हूं। जबकि मैं कोई स्पष्ट धागा नहीं कर रहा हूं, मुझे आश्चर्य है कि स्प्रिंग और टोमकैट के दृश्यों के पीछे क्या चल रहा है। क्या मैं स्ट्रिंगबफर के बजाय स्ट्रिंगबिल्डर का उपयोग कर किसी भी मुद्दे पर दौड़ूंगा?क्या मुझे वेबपैप्स के लिए स्ट्रिंगबिल्डर या स्ट्रिंगबफर का उपयोग करना चाहिए?
उत्तर
यदि आप स्थानीय चर का उपयोग कर रहे हैं तो आप सुरक्षित रूप से StringBuilder
का उपयोग कर सकते हैं। प्रत्येक धागे को अपना उदाहरण मिल जाएगा।
+1। और यदि आप * थ्रेड के बीच स्ट्रिंग साझा कर रहे हैं (उदा। स्थिर फ़ील्ड का उपयोग करके), तो आपको शायद 'स्ट्रिंगबिल्डर' * या * स्ट्रिंगबफर 'के बजाय' स्ट्रिंग 'का उपयोग करना चाहिए। – ruakh
खंडख के बिंदु पर जोर देने के लिए: धागे के बीच अपरिवर्तनीय डेटा पास करना सुरक्षित दृष्टिकोण है। –
यदि कोड एक सर्वलेट (डूगेट/डूपोस्ट) में है तो एकाधिक अनुरोध सर्वलेट उदाहरण बहु-थ्रेड होने का कारण बनेंगे। यदि कोड स्प्रिंग बीन में है तो यह इस बात पर निर्भर करेगा कि आपने बीन को सिंगलटन या प्रोटोटाइप के रूप में कॉन्फ़िगर किया है या नहीं।
अधिक सटीक होने के लिए, आपको यह कहना चाहिए: कि सर्वलेट उदाहरण को विभिन्न ग्राहकों की सेवा करने वाले एकाधिक थ्रेड द्वारा साझा किया जा सकता है। – Razvan
यह कहने का एक बेहतर तरीका है। :) –
आमतौर पर जावा ईई घटक डिफ़ॉल्ट रूप से थ्रेड-सुरक्षित नहीं होते हैं, इसलिए जब तक आप कोड के ब्लॉक को सिंक्रनाइज़ नहीं करते हैं, जहां आप StringBuilder
का उपयोग करते हैं, तो आप दौड़-स्थितियों का अनुभव करेंगे। इसलिए, आपको या तो सिंक्रनाइज़ेशन का ख्याल रखना होगा या StringBuffer
का उपयोग करना होगा।
बेशक, जैसा कि पहले से ही बताया गया है कि StringBuilder
एक स्थानीय चर है, तो आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।
स्ट्रिंगबिल्डर का उपयोग करें क्योंकि आपका निर्माता डूपोस्ट या डूगेट या अन्य में एक स्थानीय चर है। यह सच है कि एकाधिक सर्वर थ्रेड एक ही सर्वलेट उदाहरण का उपयोग करते हैं लेकिन तथ्य यह है कि आपका निर्माता स्थानीय चर है, चिंता करने का कोई कारण नहीं है! यदि आपका निर्माता आपकी सर्वलेट कक्षा का सदस्य था, तो सुनिश्चित करें कि आपको थ्रेड-सुरक्षा समस्याएं मिलेंगी। मुझे लगता है कि यह तुम्हारा मामला नहीं है।
जावा दस्तावेज़ java.lang.StringBuffer के बारे में कहते हैं: इस वर्ग के केवल स्ट्रिंग बफर पर सिंक्रनाइज़ करता
जब भी एक ऑपरेशन एक स्रोत अनुक्रम को शामिल होती है (जैसे के रूप में appending या एक स्रोत अनुक्रम से डालने) ऑपरेशन कर रहा है, स्रोत पर नहीं।
इसका मतलब है कि आपके स्ट्रिंगबफर पर आपके ऑपरेशन सुरक्षित होंगे भले ही आप बहु-थ्रेड वातावरण [जैसे वेब ऐप] में हों। इस तरह के स्ट्रिंगबफर उदाहरण की सुरक्षा चर के दायरे से शासित है।
- 1. स्ट्रिंगबफर बनाम स्ट्रिंगबिल्डर वीएस स्ट्रिंगटोकनाइज़र
- 2. सी # से अप्रबंधित फ़ंक्शन को कॉल करना: क्या मुझे स्ट्रिंगबिल्डर पास करना चाहिए या असुरक्षित कोड का उपयोग करना चाहिए?
- 3. क्या मुझे आईपैयर या लूप के लिए उपयोग करना चाहिए
- 4. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 5. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 6. एचटीएमएल। क्या मुझे सीडीएटीए का उपयोग करना चाहिए या HTML
- 7. क्या मुझे WPF कनवर्टर या ट्रिगर का उपयोग करना चाहिए?
- 8. क्या मुझे eval() या call_user_func() का उपयोग करना चाहिए?
- 9. क्या मुझे एम या पीएक्स का उपयोग करना चाहिए?
- 10. क्या मुझे इंटरफ़ेस निर्माता का उपयोग करना चाहिए या नहीं?
- 11. क्या मुझे श्रोता या पर्यवेक्षक का उपयोग करना चाहिए?
- 12. क्या मुझे विरासत या संरचना का उपयोग करना चाहिए?
- 13. क्या मुझे डेटा.फ्रेम या मैट्रिक्स का उपयोग करना चाहिए?
- 14. क्या मुझे फ़्लैश या फ्लेक्स का उपयोग करना चाहिए?
- 15. जीयूआई। क्या मुझे एसडब्ल्यूटी या जीडब्ल्यूटी का उपयोग करना चाहिए?
- 16. क्या मुझे टेक्स्ट फ़ाइल या डेटाबेस का उपयोग करना चाहिए?
- 17. क्या मुझे डबल या फ्लोट का उपयोग करना चाहिए?
- 18. क्या मुझे अलार्ममेनगर या हैंडलर का उपयोग करना चाहिए?
- 19. क्या मुझे प्रोटोटाइप का उपयोग करना चाहिए या नहीं?
- 20. क्या मुझे स्लीप() का उपयोग करना चाहिए या बस उन्हें
- 21. क्या मुझे int या UInt16 का उपयोग करना चाहिए?
- 22. शेयरपॉइंट: क्या मुझे सूचियों या डेटाबेस का उपयोग करना चाहिए?
- 23. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 24. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 25. क्या मुझे AppDomain.CurrentDomain.BaseDirectory या System.Environment.CurrentDirectory का उपयोग करना चाहिए?
- 26. क्या मुझे scipy.pi, numpy.pi, या math.pi का उपयोग करना चाहिए?
- 27. क्या मुझे फोबोस या टैंगो का उपयोग करना चाहिए?
- 28. स्ट्रिंगबफर/स्ट्रिंगबिल्डर क्यों बराबर या हैशकोड ओवरराइड नहीं करता है?
- 29. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 30. क्या मुझे रूबी धागे का उपयोग करना चाहिए या थ्रेडिंग के लिए पूरी तरह रूबी का उपयोग नहीं करना चाहिए?
[जावा में StringBuilder और StringBuffer] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/355089/stringbuilder-and-stringbuffer-in-java) – kosa
@thinksteep यह सवाल लगता है सूत्रण किस तरह पर ध्यान केंद्रित करने वेबपैप्स में दृश्यों के पीछे होता है और यह स्ट्रिंग बिल्डिंग को कैसे प्रभावित करता है। –
शायद डुप्लिकेट नहीं। ऐसा लगता है कि स्ट्रिंगबिल्डर/स्ट्रिंगबफर वर्गों की तुलना में टॉमकैट में थ्रेडिंग के बारे में अधिक सवाल है। –