English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، سنستخدم الأمثلة لدراسة فئة LinkedBLockingQueue وطرقها.
استخدام فئة LinkedBlockingQueue من إطار العمل Java Collections لتوفير تنفيذ قائمة انتظار مكتظة باستخدام قائمة مرتبطة.
لقد تم إنجازهJava BlockingQueue واجهة.
لإنشاء قائمة الحظر السلسة، يجب علينا إدراج حزمة java.util.concurrent.LinkedBlockingQueue.
هذه هي الطريقة التي نقوم بها بإنشاء قائمة الحظر السلسة في Java:
1. بدون حجم مبدئي
LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>();
في هذا السياق، الحجم المبدئي الافتراضي هو 2 31 -1.
2. مع الحجم المبدئي
LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity);
في هذا السياق،
Type - نوع قائمة الحظر السلسة
capacity - حجم قائمة الحظر السلسة
على سبيل المثال،
// إنشاء LinkedBlockingQueue حجمه 5 من النوع String LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); // إنشاء LinkedBlockingQueue حجمه 5 من النوع Integer LinkedBlockingQueue<Integer> age = new LinkedBlockingQueue<>(5);
ملاحظة:ليس من الضروري تقديم حجم القائمة.
يقدمها فئة LinkedBlockingQueueواجهة BlockingQueueكل تنفيذ للاجراءات.
تستخدم هذه الطرق للاضطراب، الوصول، والإزالة من قائمة الحظر السلسة.
إضافة إلى ذلك، سنتعلم عن طريقتين put()، take()، تدعم عمليات الحظر في قائمة الحظر السلسة.
تفرق هذان الطريقيان بين قائمة الحظر السلسة وغيرها من القوائم التقليدية.
add() - يضيف العنصر المحدد إلى قائمة الحظر السلسة. إذا كانت القائمة ممتلئة، فإنها ترمي استثناءً.
offer() - يضيف العنصر المحدد إلى قائمة الحظر السلسة. إذا كانت القائمة ممتلئة، فإنها تعود false.
على سبيل المثال،
import java.util.concurrent.LinkedBlockingQueue; class Main { public static void main(String[] args) { LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); // استخدم add() animals.add("Dog"); animals.add("Cat"); // استخدم offer() animals.offer("Horse"); System.out.println("LinkedBlockingQueue: " + animals); } }
النتيجة المتوقعة
LinkedBlockingQueue: [Dog, Cat, Horse]
peek() - يعيد عنصرًا من مقدمة قائمة الحظر السلسة. إذا كانت القائمة فارغة، فإنها تعود null.
iterator() - يعود بجسم م迭代ر لاستطلاع العناصر في قائمة الحظر السلسة. إذا كانت القائمة فارغة، فإنها ترمي استثناءً. يجب علينا إدراج حزمة java.util.Iterator لاستخدامها.
على سبيل المثال،
import java.util.concurrent.LinkedBlockingQueue; إدراج import java.util.Iterator; class Main { public static void main(String[] args) { LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); // إضافة عنصر animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // استخدم peek() String element = animals.peek(); System.out.println("استنساخ العنصر: " + element); // استخدام iterator() Iterator<String> iterate = animals.iterator(); System.out.print("عناصر LinkedBlockingQueue: "); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
النتيجة المتوقعة
LinkedBlockingQueue: [Dog, Cat, Horse] استنساخ العنصر: Dog عناصر LinkedBlockingQueue: Dog, Cat, Horse,
remove() - عودة العنصر المحدد من سلسلة الحظر وإزالته. إذا كان الصندوق فارغًا، فإنه سيتم إلقاء استثناء.
poll() - عودة العنصر المحدد من سلسلة الحظر وإزالته. إذا كان الصندوق فارغًا، فسيتم عودة null.
clear() - حذف جميع العناصر من سلسلة الحظر.
على سبيل المثال،
import java.util.concurrent.LinkedBlockingQueue; class Main { public static void main(String[] args) { LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + animals); // استخدام remove() String element1 = animals.remove(); System.out.println("حذف العنصر:"); System.out.println("استخدام remove(): " + element1); // استخدام poll() String element2 = animals.poll(); System.out.println("استخدام poll(): " + element2); // استخدام clear() animals.clear(); System.out.println("LinkedBlockingQueue بعد التحديث " + animals); } }
النتيجة المتوقعة
LinkedBlockingQueue: [Dog, Cat, Horse] حذف العنصر: استخدام remove(): Dog استخدام poll(): Cat LinkedBlockingQueue: []
في عملية متعددة النواة، يمكننا استخدام put() وtake() لتحديد عمل سلسلة النواة لتحقيق التوافق مع سلسلة أخرى. ستبقى هذه الطرق في انتظار تنفيذها بنجاح.
لإضافة العنصر المحدد إلى نهاية قائمة الحظر المرتبة، نستخدم الطريقة put().
إذا كانت قائمة الحظر المرتبة ممتلئة، فإنها ستنتظر حتى يكون هناك مساحة كافية للاضطلاع بالعنصر.
على سبيل المثال،
import java.util.concurrent.LinkedBlockingQueue; class Main { public static void main(String[] args) { LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); try { //إضافة العنصر إلى animals animals.put("كلب"); animals.put("قط"); System.out.println("LinkedBlockingQueue: " + animals); } catch(Exception e) { System.out.println(e); } } }
النتيجة المتوقعة
LinkedBlockingQueue: [قط، قط]
في هذه الحالة، إذا تم إيقافها أثناء الانتظار، قد تقوم الطريقة put() بعرض استثناء InterruptedException. لذلك، يجب علينا تضمينها فيفي محاكاة try..catch.
لإزالة عنصر من مقدمة قائمة الحظر المرتبة وإزالته، يمكننا استخدام الطريقة take().
إذا كانت قائمة الحظر مرتبة فارغة، فإنها ستنتظر حتى يكون هناك عنصر لإزالته من قائمة الحظر المرتبة.
على سبيل المثال،
import java.util.concurrent.LinkedBlockingQueue; class Main { public static void main(String[] args) { LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5); try { //إضافة العنصر إلى animals animals.put("كلب"); animals.put("قط"); System.out.println("LinkedBlockingQueue: " + animals); //حذف عنصر String element = animals.take(); System.out.println("حذف العنصر: " + element); System.out.println("القائمة المرتبة الجديدة: " + animals); } catch(Exception e) { System.out.println(e); } } }
النتيجة المتوقعة
LinkedBlockingQueue: [قط، قط] حذف العنصر: [قط] القائمة المرتبة الجديدة: [قط]
في هذه الحالة، إذا تم إيقافها أثناء الانتظار، ستقوم الطريقة take() بعرض استثناء InterruptedException. لذلك، يجب علينا تضمينها في محاكاة try...catch.
Methods | Content Description |
---|---|
contains(element) | Search for the specified element in the linked list blocking queue. If the element is found, return true, otherwise return false. |
size() | Return the length of the linked list blocking queue. |
toArray() | Convert the linked list blocking queue to an array and return the array. |
toString() | Convert the linked list blocking queue to a string |
LinkedBlockingQueue uses a linked list as its internal storage.
It is consideredThread-safeCollection. Therefore, it is usually used in multithreaded applications.
Assuming one thread is inserting elements into the queue, while another thread is deleting elements from the queue.
Now, if the first thread is slower than the second thread, the linked list blocking queue can make the second thread wait until the first thread completes its operation.