জাভা সিঙ্ক্রোনাইজেশন সম্পর্কে যখনই কোনও প্রশ্ন এসও-তে উঠে আসে তখন কিছু লোক synchronized(this)
এড়াতে হবে তা উল্লেখ করতে খুব আগ্রহী । পরিবর্তে, তারা দাবি করে, একটি ব্যক্তিগত রেফারেন্সে একটি লক পছন্দ করা উচিত।
প্রদত্ত কয়েকটি কারণ হ'ল:
- কিছু দুষ্ট কোড আপনার লক চুরি করতে পারে (এটি খুব জনপ্রিয়, এটি একটি "দুর্ঘটনাক্রমে" বৈকল্পিকও রয়েছে)
- একই শ্রেণীর মধ্যে সমস্ত সিঙ্ক্রোনাইজড পদ্ধতিতে একই একই লক ব্যবহার করা হয়, যা থ্রুপুট হ্রাস করে
- আপনি (অযথা) খুব বেশি তথ্য প্রকাশ করছেন
আমাকে সহ অন্যান্য লোকেরা যুক্তি দেয় যে synchronized(this)
একটি প্রচলিতাসক্তি যা প্রচুর ব্যবহৃত হয় (জাভা লাইব্রেরিতেও) নিরাপদ এবং ভাল বোঝা যায়। এটি এড়ানো উচিত নয় কারণ আপনার একটি বাগ রয়েছে এবং আপনার মাল্টিথ্রেড প্রোগ্রামে কী চলছে তার কোনও ক্লু আপনার নেই। অন্য কথায়: যদি এটি প্রযোজ্য হয়, তবে এটি ব্যবহার করুন।
আমি কিছু বাস্তব-জগতের উদাহরণগুলি দেখতে আগ্রহী (কোনও ফুবারের জিনিস নেই) যেখানে কোনও লক চালু this
করা এড়ানো ভাল যখন synchronized(this)
কাজটি করানোও ভাল ।
অতএব: আপনি কি সর্বদা ব্যক্তিগত এড়াতে synchronized(this)
এবং কোনও ব্যক্তিগত রেফারেন্সের তালা দিয়ে প্রতিস্থাপন করা উচিত ?
আরও কিছু তথ্য (উত্তরগুলি দেওয়া হিসাবে আপডেট করা হয়েছে):
- আমরা উদাহরণ সিঙ্ক্রোনাইজেশন সম্পর্কে কথা বলছি
- উভয়ই অন্তর্নিহিত (
synchronized
পদ্ধতি) এবং সুস্পষ্ট রূপsynchronized(this)
বিবেচনা করা হয় - যদি আপনি এই বিষয়টিতে ব্লচ বা অন্যান্য কর্তৃপক্ষকে উদ্ধৃতি দিয়ে থাকেন তবে আপনার পছন্দ মতো অংশগুলি ছেড়ে যাবেন না (উদাহরণস্বরূপ কার্যকর জাভা, থ্রেড সুরক্ষা বিষয়ক আইটেম: সাধারণত এটি উদাহরণস্বরূপ লক, তবে ব্যতিক্রমগুলি রয়েছে))
- যদি সরবরাহের পরিবর্তে আপনার লকিংয়ে আপনার গ্রানুলারিটির প্রয়োজন হয়
synchronized(this)
তবেsynchronized(this)
তা প্রযোজ্য নয় তাই এটি সমস্যা নয়