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