تحويل طوابير wait و notify إلى BlockingQueue
استبدل تنسيق المنتج-المستهلك المكتوب يدوياً باستخدام 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
الصعوبة
متوسط
دعم JDK
تحويل طوابير wait و notify إلى BlockingQueue
متاح
متاح على نطاق واسع منذ JDK 5 (2004)
كيف يعمل
يتطلب كود wait/notify الصحيح مراقباً مشتركاً وحلقات شرطية وإشعارات متطابقة ومعالجة دقيقة للمقاطعة. تُغلّف BlockingQueue هذه القواعد وتوفر عمليات حاجزة ومحددة زمنياً وغير حاجزة لسير عمل المنتج-المستهلك. تبقى استدعاءات مثل put() و take() قابلة للمقاطعة.
توثيق ذو صلة
إثبات