একটি প্রোডাকশন ওয়েব অ্যাপ্লিকেশনটিতে, আমার সহকর্মী প্রোগ্রামাররা সর্বত্র স্ট্রিংবফার ব্যবহার করেছিল। এখন আমি অ্যাপ্লিকেশন বিকাশ এবং সংশোধন যত্ন নিচ্ছি। স্ট্রিংবুডার এবং স্ট্রিংবফার পড়ার পরে আমি স্ট্রিংবুডারের সাথে সমস্ত স্ট্রিংবফার কোডটি প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি কারণ আমাদের ডেটা মটরশুটিতে থ্রেড সুরক্ষা দরকার নেই need
উদাহরণস্বরূপ: (প্রতিটি ডাটা বিনে আমি স্ট্রিংবফার ব্যবহার দেখতে পাচ্ছি)
@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
ইন্টারফেসের সাথে থ্রেড সিঙ্ক্রোনাইজ করা একটি খারাপ ধারণা, আমি মনে করি এই শ্রেণীর অস্তিত্ব থাকা উচিত নয় এবং এটি সর্বদা ব্যবহার করা উচিত StringBuilder
। অন্যরা ইতিমধ্যে উল্লিখিত হিসাবে, StringBuffer
historicalতিহাসিক কারণে বিদ্যমান।
sb
উদাহরণ হিসাবে স্থানীয় ভেরিয়েবল হিসাবে ব্যবহার করেন তবে থ্রেড-সুরক্ষা মোটেই গুরুত্বপূর্ণ নয়। এমনকি একসাথে এক হাজার থ্রেড পদ্ধতিতে প্রবেশ করলেও প্রত্যেকের নিজস্ব স্থানীয় ভেরিয়েবলগুলির সাথে নিজস্ব কল স্ট্যাক থাকবে। স্ট্রিং বিল্ডাররা একে অপরের সাথে কখনও হস্তক্ষেপ করবে না।