আমার কখন স্ট্রিংবিল্ডার বা স্ট্রিংবুফার ব্যবহার করা উচিত?


13

একটি প্রোডাকশন ওয়েব অ্যাপ্লিকেশনটিতে, আমার সহকর্মী প্রোগ্রামাররা সর্বত্র স্ট্রিংবফার ব্যবহার করেছিল। এখন আমি অ্যাপ্লিকেশন বিকাশ এবং সংশোধন যত্ন নিচ্ছি। স্ট্রিংবুডার এবং স্ট্রিংবফার পড়ার পরে আমি স্ট্রিংবুডারের সাথে সমস্ত স্ট্রিংবফার কোডটি প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি কারণ আমাদের ডেটা মটরশুটিতে থ্রেড সুরক্ষা দরকার নেই 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);
}

আমরা প্রতিটি সেশন / অনুরোধের জন্য একটি পৃথক ডেটা মটরশুটি তৈরি করি। একটি সেশন একটি একক ব্যবহারকারীর দ্বারা ব্যবহৃত হয় অন্য কোনও ব্যবহারকারী এটি অ্যাক্সেস করতে পারে না।

স্থানান্তরের আগে আমার অন্যান্য বিষয়গুলি বিবেচনা করা উচিত?

যদি কোনও এক থ্রেড থাকে (কোনও অপেক্ষার থ্রেড নেই / কোনও নতুন থ্রেড অবজেক্ট লকটির সন্ধান করবে না), এটি স্ট্রিংবুফার বা স্ট্রিংবুডার উভয়ের সাথে সমানভাবে সম্পাদন করে। আমি স্ট্রিংবাফারের ক্ষেত্রে জানি, অবজেক্ট লকটি নিতে সময় লাগে তবে আমি জানতে চাই যে অবজেক্ট লকের হোল্ড / রিলিজ ব্যতীত তাদের মধ্যে কোনও পারফরম্যান্সের পার্থক্য রয়েছে কিনা।


9
আপনি যদি sbউদাহরণ হিসাবে স্থানীয় ভেরিয়েবল হিসাবে ব্যবহার করেন তবে থ্রেড-সুরক্ষা মোটেই গুরুত্বপূর্ণ নয়। এমনকি একসাথে এক হাজার থ্রেড পদ্ধতিতে প্রবেশ করলেও প্রত্যেকের নিজস্ব স্থানীয় ভেরিয়েবলগুলির সাথে নিজস্ব কল স্ট্যাক থাকবে। স্ট্রিং বিল্ডাররা একে অপরের সাথে কখনও হস্তক্ষেপ করবে না।
ফ্রেডওভারফ্লো

আমি সর্বদা ভাবছিলাম যে কে এর ইন্টারফেসের মতো কিছু দিয়ে দুটি থ্রেড সিঙ্ক্রোনাইজ করতে চায় StringBuffer। আমি এর মতো কোডটি কখনই দেখিনি তবে আমি নিশ্চিত যে এটি একটি বহুগঠিত দৃষ্টিকোণ থেকে একটি খারাপ নকশা। যেহেতু আমি মনে করি StringBufferইন্টারফেসের সাথে থ্রেড সিঙ্ক্রোনাইজ করা একটি খারাপ ধারণা, আমি মনে করি এই শ্রেণীর অস্তিত্ব থাকা উচিত নয় এবং এটি সর্বদা ব্যবহার করা উচিত StringBuilder। অন্যরা ইতিমধ্যে উল্লিখিত হিসাবে, StringBufferhistoricalতিহাসিক কারণে বিদ্যমান।
pasztorpisti

উত্তর:


22

দুটির মধ্যে একমাত্র পার্থক্য হ'ল স্ট্রিংবুফারে ব্যবহৃত সিঙ্ক্রোনাইজেশন। জিনিসের বিশাল স্কিমে সিঙ্ক্রোনাইজেশনের ওভারহেড বিশাল নয়, তবে স্ট্রিংবিল্ডার পদ্ধতিগুলির সাথে এটি তাত্পর্যপূর্ণ। জেভিএম এমন কাজ করছে যা অন্যথায় করতে হবে না - বিশেষত কেবল একটি থ্রেড ইত্যাদি দিয়ে etc.

যদি আপনার কোডটি কাজ করে এবং লোকেরা পারফরম্যান্স সম্পর্কে অভিযোগ না করে তবে আমি এটি নিয়ে চিন্তা করব না। আপনি আপনার পুকুর জন্য প্রচুর ঠাঁই পেতে যাচ্ছেন না। তবে, আপনি যদি নতুন কোড লিখছেন, বা স্ট্রিংবফার ব্যবহার করে এমন কোড আপডেট করছেন তবে আমি তাদের একই সাথে স্ট্রিংবিল্ডার রূপান্তর করার পরামর্শ দিচ্ছি।


আমি এটি যুক্ত করব যে আপনি দুজনের উত্তরাধিকার সূত্রে সুরক্ষা মাথায় রাখতে হবে। স্ট্রিংবিল্ডার থ্রেড নিরাপদ নয়।
মার্টিজ ভার্বার্গ

2
@MartijnVerburg এটা ঠিক যে, altough এটা আউট তীক্ষ্ন ছিল stackoverflow.com/questions/6775016/stringbuffer-is-obsolete/... খুব কম ব্যবহার স্ট্রিং রচয়িতা একই উদাহরণস্বরূপ ব্যবহার করতে একাধিক থ্রেড প্রয়োজন মামলা রয়েছে।
ম্যাথু ফ্লিন 22

4
@MartijnVerburg: এটা লক্ষনীয় করা উচিত: যদি আপনি সত্যিই তারপর থ্রেড নিরাপত্তা প্রয়োজন সম্ভাবনা আছে StringBufferযথেষ্ট পারেন না! এটি গ্যারান্টি দেয় যে এটি ব্রেক করে না, তবে আপনি যে অবস্থানটিতে যুক্ত করেছেন তা সহজেই নিয়ন্ত্রণ করা যায় না যদি একাধিক থ্রেড একবারে এটি অ্যাক্সেস করে, তবে অন্য একটি বাহ্যিক সমন্বয় প্রয়োজন।
জোচিম সৌর

8

স্ট্রিংবুডারকে আরও ভাল ও দ্রুত স্ট্রিংবফার হতে একটি পয়েন্টে (জাভা 1.5) যুক্ত করা হয়েছিল এবং সংকলক +স্ট্রিংগুলিতে অপারেটরটি বাস্তবায়নের জন্য হুডের নীচে এটি ব্যবহার করে ।

এর অর্থ এই যে স্ট্রিংবিল্ডার ব্যবহার করে আপনি ক্লাসটি চালু হওয়ার আগে জেভিএম এর চেয়ে পুরনোতে আপনার কোড চালাতে পারবেন না। এটি আমাদের কিছুক্ষণের জন্য সমস্যা হবে। আপনি যদি সর্বদা সর্বশেষতম চালনা করেন তবে আপনার যত্নের প্রয়োজন নেই।

নিম্নলিখিত কারণে যদিও আপনি যে অপটিমাইজেশন প্রক্রিয়াটি অতিক্রম করছেন তা আমি পেরে উঠব না।

  • বাইরে কড়া লুপগুলি সুবিধা নগণ্য। যদি না এটি স্পষ্টভাবে কোনও প্রোফাইলার হটস্পট হিসাবে প্রদর্শিত না হয়, আমি বিরক্ত করব না।
  • কোড পরিবর্তন করা ত্রুটিগুলি প্রবর্তন করতে পারে এবং আপনাকে অবশ্যই আপনার অ্যাপ্লিকেশনটি ভালভাবে পরীক্ষা করতে হবে। অ-সিঙ্ক্রোনাইজড সেটিংয়ে সিঙ্ক্রোনাইজ করা শ্রেণীর সাথে বেঁচে থাকার চেয়ে এটি অনেক বেশি ব্যয়বহুল।

আমি আপনার সাথে একমত .. এখনও আপনার বক্তব্য বুঝতে সক্ষম নাOutside tight loops the advantage is negligible...
সতীশ পান্ডে

স্ট্রিংবুফারের বিপরীতে স্ট্রিংবুডারে যে প্রক্রিয়াটি অনুপস্থিত তা থ্রেড সুরক্ষার জন্য ব্যবসায়ের গতি is এই গতির উন্নতি খুব ছোট, তাই এটি কেবলমাত্র যখন এটি অনেক বার করা হয় - তবে এটি একটি ছোট লুপের ক্ষেত্রে প্রায়শই ঘটে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.