كيفية تنفيذ واجهة BlockingQueue في جافا



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن كيفية تنفيذ واجهة BlockingQueue في Java.

يعد الطابور جانبًا مهمًا في أي لغة برمجة. خاصة إذا تحدثنا عنها . في هذه المقالة ، سنناقش واجهة BlockingQueue في Java بالترتيب التالي:

ما هي واجهة BlockingQueue في جافا؟

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





قائمة انتظار الأولوية في c ++

لا تقبل واجهة قائمة الانتظار في جافالا شيءالقيم ورميNullPointerExceptionإذا حاولت تخزين القيمة الخالية في قائمة الانتظار.تطبيقات Java BlockingQueue هي خيط آمن . جميع طرق الانتظار ذرية بطبيعتها وتستخدم الأقفال الداخلية أو غيرها من أشكال التحكم في التزامن.



مخطط فئة قائمة انتظار جافا

تعمل واجهة Java Queue على توسيع واجهة Collection. تعمل واجهة المجموعة على توسيع الواجهة القابلة للتكرار. بعض فئات تطبيق قائمة الانتظار المستخدمة بشكل متكرر هي LinkedList و PriorityQueue و ArrayBlockingQueue و DelayQueue و LinkedBlockingQueue و PriorityBlockingQueue والخ. يوفر AbstractQueue تنفيذًا هيكليًا لواجهة قائمة الانتظار لتقليل الجهد المبذول في تنفيذ قائمة الانتظار.

حظر أنواع قائمة الانتظار

قائمة الحظر نوعان:



  • قائمة انتظار غير محدودة: سيتم تعيين قدرة قائمة انتظار الحظر على عدد صحيح. MAX_VALUE. في حالة قائمة انتظار الحظر غير المحدودة ، لن يتم حظر قائمة الانتظار أبدًا لأنها يمكن أن تنمو إلى حجم كبير جدًا. عندما تضيف عناصر يزداد حجمها.

بناء الجملة:
BlockingQueue blocking queue = new LinkedBlockingDeque ()

  • قائمة الانتظار المحدودة: النوع الثاني من قائمة الانتظار هو قائمة الانتظار المحدودة. في حالة قائمة الانتظار المحدودة ، يمكنك إنشاء قائمة انتظار تتجاوز سعة قائمة الانتظار في مُنشئ قوائم الانتظار:
    بناء الجملة:
    // ينشئ قائمة انتظار مع سعة 5

BlockingQueue blocking queue = new LinkedBlockingDeque (5)

الطرق في حظر واجهة قائمة الانتظار

نوع التغيير بناء الجملة يستعمل ل وصف
منطقي أضف (E و) إدراج

يُدرج العنصر المحدد في قائمة الانتظار هذه إذا كان من الممكن القيام بذلك على الفور دون انتهاك قيود السعة ، والعودة إلى الحالة الصحيحة عند النجاح وإلقاء IllegalStateException إذا لم تكن هناك مساحة متوفرة حاليًا.

منطقي يحتوي على (كائن س) فحص

يعود صحيحًا إذا كانت قائمة الانتظار تحتوي على عنصر محدد.

int استنزاف (مجموعة ج) الاسترجاع أو الإزالة

يزيل كل العناصر المتاحة من قائمة الانتظار هذه ويضيفها إلى المجموعة المحددة.

int تصريف إلى (مجموعة c ، int maxElements) الاسترجاع أو الإزالة

يزيل على الأكثر العدد المحدد من العناصر المتاحة من قائمة الانتظار هذه ويضيفها إلى المجموعة المحددة.

منطقي عرض (E و) إدراج

يُدرج العنصر المحدد في قائمة الانتظار هذه إذا كان من الممكن القيام بذلك على الفور دون انتهاك قيود السعة ، والعودة صحيحة عند النجاح والخطأ إذا لم تكن هناك مساحة متوفرة حاليًا.

منطقي عرض (E e ، مهلة طويلة ، وحدة TimeUnit) إدراج

يُدرج العنصر المحدد في قائمة الانتظار هذه ، في انتظار وقت الانتظار المحدد إذا لزم الأمر لتوفير مساحة.

يكون استطلاع (مهلة طويلة ، وحدة TimeUnit) الاسترجاع أو الإزالة

استرداد رأس قائمة الانتظار هذه وإزالتها ، والانتظار حتى وقت الانتظار المحدد إذا لزم الأمر حتى يصبح العنصر متاحًا.

باطل ضع (E e) إدراج

يُدرج العنصر المحدد في قائمة الانتظار هذه ، في انتظار توفر مساحة عند الضرورة.

int القدرة المتبقية() فحص

لعرض عدد العناصر الإضافية التي يمكن لقائمة الانتظار هذه أن تقبلها بشكل مثالي (في حالة عدم وجود قيود على الذاكرة أو الموارد) بدون حظر ، أو إرجاع عدد صحيح. MAX_VALUE إذا لم يكن هناك حد جوهري.

منطقي إزالة (الكائن o) + الاسترجاع أو الإزالة

يزيل مثيل واحد للعنصر المحدد من قائمة الانتظار هذه ،إذا كانت موجودة.

يكون يأخذ() الاسترجاع أو الإزالة

استرداد رأس قائمة الانتظار هذه وإزالتها ، والانتظار إذا لزم الأمر حتى يتوفر عنصر.

كيفية عمل قائمة مرتبطة في ج

واجهة BlockingQueue في Java مثال: الخدمة

package com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// Creating BlockingQueue of size 10 BlockingQueue queueing = newQueue 10) المنتج المنتج = المُنتِج الجديد (قائمة الانتظار) المستهلك المستهلك = مستهلك جديد (قائمة الانتظار) // بدء المُنتِج في إنتاج الرسائل في قائمة الانتظار الجديدة (المنتج) .start () // بدء المستهلك في استهلاك الرسائل من قائمة الانتظار الجديدة (المستهلك) .start () System.out.println ('تم بدء المنتج والمستهلك')}}

بهذا نكون قد وصلنا إلى نهاية مقالة BlockingQueue Interface في Java. آمل أن تكون كل مفاهيمك الآن واضحة.

تفحص ال من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. تم تصميم دورة تدريب وشهادة Java J2EE و SOA من Edureka للطلاب والمهنيين الذين يرغبون في أن يصبحوا مطوري Java. تم تصميم الدورة التدريبية لمنحك السبق في برمجة Java وتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في مدونة 'BlockingQueue Interface in Java' وسنعاود الاتصال بك في أقرب وقت ممكن.