ما هو Thread-Safe BlockingQueue في جافا؟ متى يجب استخدامه؟ التنفيذ مرفق

نشرت: 2021-04-30
ما هو Threadafe BlockingQueue في Java ومتى يجب عليك استخدامه

لقد كتبت حتى الآن مقالتين عن مفهوم Producer Consumer على Crunchify. الأول لشرح Java Semaphore و Mutex والثاني لشرح القراءة / الكتابة المتزامنة.

في هذا البرنامج التعليمي لجافا سننتقل إلى نفس مفهوم المُنتِج / المستهلك لشرح قائمة BlockingQueue in Java .

ما هي مزايا حظر قائمة الانتظار في جافا؟

يدعم java.util.Queue العمليات التي تنتظر حتى تصبح قائمة الانتظار غير فارغة عند استرداد عنصر ، وتنتظر حتى تصبح المساحة متوفرة في قائمة الانتظار عند تخزين عنصر.

java.util.BlockingQueue in java - Crunchify

نحتاج إلى إنشاء أربع فئات Java:

  1. CrunchifyMessage.java لوضع الرسائل والحصول عليها
  2. CrunchifyBlockingProducer.java لوضع الرسالة في قائمة الانتظار
  3. CrunchifyBlockingConsumer.java للحصول على رسالة من قائمة الانتظار
  4. CrunchifyBlockingMain.java لبدء الاختبار

عمليات تنفيذ قائمة الانتظار هي مؤشرات thread-safe . جميع طرق الانتظار ذرية بطبيعتها وتستخدم الأقفال الداخلية.

لنبدأ في تنفيذ Thread-Safe BlockingQueue في Java

الخطوة 1

قم بإنشاء فئة CrunchifyMessage.java . هذا هو كائن جافا بسيط.

الخطوة 2

قم بإنشاء منتج CrunchifyBlockingProducer.java الذي أنشأ رسالة بسيطة ووضعها في قائمة الانتظار.

الخطوه 3

قم بإنشاء فئة CrunchifyBlockingConsumer.java التي تستهلك رسالة من قائمة الانتظار.

الخطوة 4

قم بإنشاء طريقة CrunchifyBlockingMain.java البسيطة التي تدير اختبار BlockingQueue. قم بتشغيل هذا البرنامج للتحقق من سلوك BlockingQueue.

لا يقبل BlockingQueue العناصر الفارغة . تطرح التطبيقات NullPointerException على محاولات إضافة أو طرح أو عرض قيمة خالية .

يتم استخدام القيمة الخالية كقيمة خفر للإشارة إلى فشل عمليات الاستقصاء .

نتيجة:

متى يجب استخدام java.util.concurrent.BlockingQueue؟

  • عندما تريد خنق نوع من الطلبات الواردة ، فيجب عليك استخدام نفس الشيء
  • يمكن للمنتجين أن يتقدموا كثيرًا على المستهلكين بقائمة انتظار غير محدودة. إذا كان المستهلك لا يلحق بالمنتج ، فقد يتسبب ذلك في خطأ OutOfMemoryError . في مثل هذه المواقف ، قد يكون من الأفضل الإشارة إلى منتج محتمل بأن قائمة الانتظار ممتلئة ، والاستسلام سريعًا مع حدوث فشل.
    • بعبارة أخرى: يتم خنق المنتجين بشكل طبيعي.
  • يتم استخدام حظر قائمة الانتظار عادةً في التطبيق المتزامن
  • يوفر تنفيذًا صحيحًا وآمنًا
  • يجب أن يكون استهلاك الذاكرة محدودًا أيضًا