Java ArrayBlockingQueue

Ebben az oktatóanyagban példák segítségével megismerhetjük az ArrayBlockingQueue osztályt és annak módszereit.

A ArrayBlockingQueueJava Gyűjtemények keretrendszere egy tömb segítségével biztosítja a blokkolási sor megvalósítását.

Megvalósítja a Java BlockingQueue felületet.

ArrayBlockingQueue létrehozása

A tömb blokkoló várólista létrehozásához importálnunk kell a java.util.concurrent.ArrayBlockingQueuecsomagot.

A csomag importálása után a következőképpen hozhatunk létre egy tömb blokkoló sort a Java-ban:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Itt,

  • Típus - a tömb blokkoló sor típusa
  • kapacitás - a tömb blokkoló sor nagysága

Például,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Megjegyzés: Kötelező megadni a tömb méretét.

Az ArrayBlockingQueue módszerei

Az ArrayBlockingQueueosztály biztosítja az BlockingQueueinterfész összes metódusának megvalósítását .

Ezeket a módszereket tömb blokkoló várólistákból elemek beillesztésére, elérésére és törlésére használják.

Ezenkívül megismerünk két módszert put(), take()amelyek támogatják a blokkolási műveletet a tömb blokkolási sorban.

Ez a két módszer különbözteti meg a tömb blokkoló várólistát a többi tipikus várólistától.

Helyezze be az elemeket

  • add()- Beszúrja a megadott elemet a tömb blokkolási sorába. Kivételt vet, ha a sor tele van.
  • offer()- Beszúrja a megadott elemet a tömb blokkolási sorába. Akkor tér vissza, falseha a sor tele van.

Például,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Kimenet

 ArrayBlockingQueue: (Kutya, Macska, Ló) 

Hozzáférési elemek

  • peek()- Visszaad egy elemet a tömb blokkolási sor elejéről. Akkor tér vissza, nullha a sor üres.
  • iterator()- Visszaad egy iterátorobjektumot, hogy egymás után érje el az elemeket a tömb blokkoló sorából. Kivételt dob, ha a sor üres. A használatához be kell importálnunk a java.util.Iteratorcsomagot.

Például,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Kimenet

 ArrayBlockingQueue: (Kutya, Macska, Ló) Hozzáférhető elem: Kutya ArrayBlockingQueue Elemek: Kutya, Macska, Ló, 

Elemek eltávolítása

  • remove()- Visszatér és eltávolít egy megadott elemet a tömb blokkoló sorából. Kivételt dob, ha a sor üres.
  • poll()- Visszatér és eltávolít egy megadott elemet a tömb blokkoló sorából. Akkor tér vissza, nullha a sor üres.
  • clear() - Eltávolítja az összes elemet a tömb blokkoló várólistáról.

Például,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

Kimenet

 ArrayBlockingQueue: (Kutya, Macska, Ló) Eltávolított elemek: Eltávolítás () használata: Kutya közvélemény-kutatást használ (): Macska Frissítve ArrayBlockingQueue: () 

put () és take () metódus

A többszálas folyamatok, tudjuk használni put(), és take()blokkolja a működését egy szál szinkronizálni másik téma. Ezek a módszerek megvárják, amíg sikeresen végrehajtják őket.

put () metódus

Ha egy elemet hozzá akarunk adni egy tömb blokkoló sor végéhez, használhatjuk a put()módszert.

Ha a tömb blokkoló várakozási sor tele van, akkor megvárja, amíg a tömb blokkoló sorban van hely egy elem hozzáadásához.

Például,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Kimenet

 ArrayBlockingQueue: (Kutya, Macska) 

Itt a put()módszer dobhat egy, InterruptedExceptionha várakozás közben megszakad. Ezért be kell csatolnunk egy próba … elkapó blokkba.

take () módszer

Egy elem visszaküldéséhez és eltávolításához a tömb blokkolási sor elejéről használhatjuk a take()módszert.

Ha a tömb blokkoló várakozási sor üres, akkor megvárja, amíg a tömb blokkoló sorban vannak elemek, amelyeket törölni kell.

Például,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Kimenet

 ArrayBlockingQueue: (Kutya, Macska) Eltávolított Elem: Kutya 

Itt a take()módszer dob, InterrupedExceptionha várakozás közben megszakad. Ezért be kell zárnunk egy try… catchblokkba.

Egyéb módszerek

Mód Leírások
contains(element) A megadott elem tömb blokkoló sorában keres. Ha az elem megtalálható, akkor visszatér true, ha nem, akkor visszatér false.
size() Visszaadja a tömb blokkolási sor hosszát.
toArray() A tömb blokkoló várólistát tömbgé alakítja és visszaadja.
toString() A tömb blokkoló várólistát stringgé alakítja

Miért érdemes használni az ArrayBlockingQueue-t?

A ArrayBlockingQueuetömböket belső tárhelyként használja.

Menetbiztos gyűjteménynek számít . Ezért általában többszálas alkalmazásokban használják.

Tegyük fel, hogy az egyik szál elemeket illeszt be a sorba, egy másik szál pedig eltávolítja az elemeket a sorból.

Ha az első szál lassabb, mint a második szál, akkor a tömb blokkoló várakozási sor arra késztetheti a második szálat, hogy az első szál befejezze a műveletét.

érdekes cikkek...