সিঙ্ক্রোনাইজড ব্যবহার করা - 1

"হাই, অ্যামিগো!"

"হ্যাঁ, আমি এখানে, আমি এখানে।"

"আজ, আমি আপনাকে অনুশীলনে সিঙ্ক্রোনাইজড ব্যবহার সম্পর্কে বলব ।"

"যখন একটি প্রোগ্রামে অনেকগুলি বস্তু এবং থ্রেড থাকে, এটি প্রায়ই ঘটে যে একাধিক থ্রেড একই বস্তুর সাথে একই সাথে কাজ করে। এটি করার সময়, থ্রেডগুলি একে অপরের সাথে হস্তক্ষেপ করে।"

"হ্যাঁ, আমি ইতিমধ্যে এটি জানি।"

"সুতরাং, ধরা যাক আপনার কাছে একাধিক থ্রেডের মাধ্যমে একটি বস্তু অ্যাক্সেস করা হয়েছে। সমস্যা এড়াতে আপনি দুটি জিনিস করতে পারেন।"

"প্রথমটি হ'ল সিঙ্ক্রোনাইজড ব্লকগুলি ব্যবহার করা প্রতিটি অবস্থান যেখানে অবজেক্ট অ্যাক্সেস করা হয়েছে তা মোড়ানো। তবে এই পদ্ধতিটি কাজ নাও করতে পারে যদি কিছু প্রোগ্রামার কোড লেখে যা সরাসরি অবজেক্ট অ্যাক্সেস করে, একটি সিঙ্ক্রোনাইজড ব্লক ছাড়া।"

"অতএব, একটি দ্বিতীয় পদ্ধতি বেশিরভাগ সময় ব্যবহৃত হয় - বস্তুটিকে থ্রেড-নিরাপদ করে তোলে।" "অন্য কথায়, সিঙ্ক্রোনাইজড মেকানিজমটি অবজেক্টের মধ্যেই তৈরি করা হয়েছে: এটি তার পদ্ধতিগুলিকে সিঙ্ক্রোনাইজ করে ঘোষণা করে এবং/অথবা সিঙ্ক্রোনাইজড ব্লকগুলিতে তার পদ্ধতিগুলির ভিতরে কোডটি মোড়ানো হয়।"

"তাই যেকোন অবজেক্ট যা আমি একাধিক থ্রেড থেকে ব্যবহার করতে পারি, এবং এটি প্রোগ্রামের প্রায় সমস্ত অবজেক্ট, আমাকে থ্রেড-নিরাপদ করতে হবে?"

"সাধারণভাবে, হ্যাঁ। বাস্তবে, একটি প্রোগ্রামের সমস্ত বস্তু বিভিন্ন থ্রেড দ্বারা ব্যবহৃত হয় না, তবে সাধারণত অনেকগুলি থাকে। সুতরাং, আপনি যখন একটি থ্রেডের জন্য কোড লিখতে শুরু করেন এবং এটি থেকে বিভিন্ন অবজেক্ট অ্যাক্সেস করেন, তখন প্রতিটি পদ্ধতির সাথে কল করুন। আপনার নিজেকে জিজ্ঞাসা করা উচিত, "এই কলটি কি নিরাপদ?""

"নিরাপদ?"

"থ্রেড-সেফ, যার মানে এটি একাধিক থ্রেড থেকে নিরাপদে কল করা যেতে পারে।"

"এখানে কিছু উদাহরণ দেওয়া হল৷ ধরুন আপনার কাছে একটি স্ট্রিং অবজেক্ট আছে যা বিভিন্ন থ্রেড থেকে অ্যাক্সেস করা হয়েছে৷ যেমনটি আপনার আগে থেকেই মনে রাখা উচিত ছিল, স্ট্রিং অপরিবর্তনীয় — অন্যান্য সমস্ত আদিম প্রকারের মতো৷ এর মানে হল একটি বস্তু তৈরি হওয়ার পরে পরিবর্তন হয় না৷ এর মানে এই ধরনের বস্তুকে "ভাঙ্গা" করা অসম্ভব। সমস্ত অপরিবর্তনীয় বস্তু সুতো-নিরাপদ।"

"ওয়েল, এটা জিনিস সহজ করে তোলে।"

"এখন, ধরুন আপনার একটি পরিবর্তনযোগ্য স্ট্রিং দরকার।"

"হ্যাঁ, আমার মনে আছে। এই ধরনের দুই ধরনের স্ট্রিং আছে: StringBuffer এবং StringBuilder। StringBuffer হল StringBuilder এর মতো, কিন্তু এর সমস্ত পদ্ধতি সিঙ্ক্রোনাইজ করা হয়েছে। এটি কি থ্রেড-সেফও?"

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

"বিভিন্ন থ্রেড থেকে অ্যাক্সেস করা অবজেক্টটি যদি আমার নিজের ক্লাসের একটি অবজেক্ট হয় তাহলে কি হবে? আমাকে কি এই ক্ষেত্রেও এর পদ্ধতিতে সিঙ্ক্রোনাইজড যোগ করতে হবে?"

"হ্যাঁ। এই নিয়মটি অনুসরণ করা ভাল: বিভিন্ন থ্রেড থেকে অ্যাক্সেস করা সমস্ত বস্তু অবশ্যই থ্রেড-নিরাপদ হতে হবে।"

"আমি দেখছি। আমি মনে করিনি যে সবকিছু এত গুরুতর ছিল। ধন্যবাদ, এলি।"

"আপনাকে স্বাগতম। আমি আশা করি এই টিপসগুলো আপনাকে সাহায্য করবে যখন দিয়েগো আপনাকে তার কয়েকটি সহজ কাজ দেবে। ☺"