Concurrency মধ্যম

হাতে লেখা প্রোডিউসার-কনজিউমার সমন্বয়কে BlockingQueue দিয়ে প্রতিস্থাপন করুন।

✕ Manual wait and notify
synchronized (queue) {
    while (queue.isEmpty()) {
        queue.wait();
    }
    Job job = queue.removeFirst();
    process(job);
}
✓ BlockingQueue
BlockingQueue<Job> queue = new LinkedBlockingQueue<>();

Job job = queue.take();
process(job);
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
🛡

নিরাপদ সমন্বয়

কিউ নিজেই লকিং এবং কন্ডিশন সিগন্যালিং পরিচালনা করে।

👁

স্পষ্ট উদ্দেশ্য

put() এবং take() সরাসরি প্রোডিউসার-কনজিউমার আচরণ প্রকাশ করে।

🎛

বিল্ট-ইন নীতি

সীমিত ক্যাপাসিটি, ফেয়ারনেস, টাইমআউট বা নন-ব্লকিং অপারেশন বেছে নিন।

পুরনো পদ্ধতি
ম্যানুয়াল wait এবং notify
আধুনিক পদ্ধতি
BlockingQueue
JDK থেকে
5
কঠিনতা
মধ্যম
wait/notify কিউ থেকে BlockingQueue
উপলব্ধ

JDK 5 (2004) থেকে ব্যাপকভাবে উপলব্ধ

সঠিক wait/notify কোডের জন্য একটি শেয়ার্ড মনিটর, কন্ডিশন লুপ, মিলিত নোটিফিকেশন এবং সতর্ক ইন্টারাপশন হ্যান্ডলিং প্রয়োজন। BlockingQueue এই নিয়মগুলোকে এনক্যাপসুলেট করে এবং প্রোডিউসার-কনজিউমার ওয়ার্কফ্লোর জন্য ব্লকিং, টাইমড এবং নন-ব্লকিং অপারেশন প্রদান করে। put() এবং take()-এর মতো কলগুলো এখনও ইন্টারাপ্ট করা যায়।