एक प्रोडक्शन वेब एप्लिकेशन में, मेरे साथी प्रोग्रामर ने हर जगह स्ट्रिंगर का उपयोग किया। अब मैं अनुप्रयोग विकास और सुधारों का ध्यान रख रहा हूं। StringBuilder और StringBuffer पढ़ने के बाद मैंने सभी StringBuffer कोड को StringBuilder से बदलने का निर्णय लिया है क्योंकि हमें अपने डेटा बीन्स में थ्रेड सुरक्षा की आवश्यकता नहीं है।
उदाहरण के लिए: (प्रत्येक डेटा बीन में मैं स्ट्रिंगर का उपयोग देख सकता हूं)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb.append(" ABCD : ").append(abcd);
sb.append(", EFGH : ").append(efgh);
sb.append(", IJKL : ").append(ijkl);
}
हम प्रत्येक सत्र / अनुरोध के लिए एक अलग डेटा बीन्स बनाते हैं। एक सत्र का उपयोग एकल उपयोगकर्ता द्वारा किया जाता है कोई अन्य उपयोगकर्ता इसे एक्सेस नहीं कर सकता है।
क्या मुझे प्रवास करने से पहले अन्य बिंदुओं पर विचार करना चाहिए?
यदि कोई एकल थ्रेड है (वेटिंग थ्रेड्स (कोई नया थ्रेड ऑब्जेक्ट लॉक की तलाश में नहीं होगा), तो यह स्ट्रिंगबफ़र या स्ट्रिंगबर्ल के साथ समान रूप से कार्य करता है। मैं StringBuffer के मामले में जानता हूं, ऑब्जेक्ट लॉक को लेने में समय लगता है लेकिन मैं जानना चाहता हूं कि क्या ऑब्जेक्ट लॉक की पकड़ / रिलीज को छोड़कर उनके बीच कोई प्रदर्शन अंतर है।
StringBuffer
। मैंने ऐसा कोड कभी नहीं देखा है, लेकिन मुझे यकीन है कि यह एक बहुपरत परिप्रेक्ष्य से एक बुरा डिजाइन है। चूंकि मुझे लगता है कि StringBuffer
इंटरफ़ेस के साथ थ्रेड को सिंक्रनाइज़ करना एक बुरा विचार है, मुझे लगता है कि इस वर्ग का अस्तित्व नहीं होना चाहिए और एक को हमेशा उपयोग करना चाहिए StringBuilder
। जैसा कि पहले ही दूसरों ने उल्लेख किया है, StringBuffer
ऐतिहासिक कारणों से मौजूद है।
sb
अपने उदाहरण में स्थानीय चर के रूप में उपयोग करते हैं, तो थ्रेड-सुरक्षा बिल्कुल भी मायने नहीं रखती है। यहां तक कि अगर एक हजार धागे एक साथ विधि में प्रवेश करते हैं, तो प्रत्येक के पास अपने स्थानीय चर के साथ अपनी कॉल स्टैक होगी। StringBuilders एक दूसरे के साथ कभी हस्तक्षेप नहीं करेंगे।