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() قابلة للمقاطعة.