Java LinkedBlockingQueue

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

A LinkedBlockingQueueJava Collectionskeretrendszer osztálya biztosítja a blokkolási sor megvalósítását összekapcsolt lista segítségével.

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

LinkedBlockingQueue létrehozása

Összekapcsolt blokkolási sor létrehozásához importálnunk kell a java.util.concurrent.LinkedBlockingQueuecsomagot.

Így hozhatunk létre összekapcsolt blokkoló sort a Java-ban:

1. A kezdeti kapacitás nélkül

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Itt az alapértelmezett kezdeti kapacitás 2 31 -1 lesz.

2. A kezdeti kapacitással

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Itt,

  • Típus - a kapcsolt blokkoló sor típusa
  • kapacitás - a kapcsolt blokkoló sor mérete

Például,

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

Megjegyzés: Nem kötelező megadni a linkelt lista méretét.

A LinkedBlockingQueue módszerei

Az LinkedBlockingQueueosztály biztosítja az összes módszer megvalósítását a BlockingQueue felületen.

Ezeket a módszereket használják az összekapcsolt blokkoló sorokból elemek beillesztésére, elérésére és törlésére.

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

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

Helyezze be az elemeket

  • add()- Beilleszt egy megadott elemet a kapcsolt blokkoló sorba. Kivételt vet, ha a sor tele van.
  • offer()- Beilleszt egy megadott elemet a kapcsolt blokkoló sorba. Akkor tér vissza, falseha a sor tele van.

Például,

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

Kimenet

 LinkedBlockingQueue: (Kutya, Macska, Ló) 

Hozzáférési elemek

  • peek()- Visszaad egy elemet a kapcsolt blokkoló sor elejéről. Akkor tér vissza, nullha a sor üres.
  • iterator()- Visszaad egy iterátorobjektumot, amely az összekapcsolt blokkoló várakozási sorból egymás után eléri az elemeket. 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.LinkedBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("LinkedBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Kimenet

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

Elemek eltávolítása

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

Például,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) ) 

Kimenet

 LinkedBlockingQueue: (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 LinkedBlockingQueue: () 

put () és take () metódusok

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 () módszer

A megadott elemet egy összekapcsolt blokkoló sor végére illesztjük, a put()módszert használjuk .

Ha az összekapcsolt blokkolási sor megtelt, akkor megvárja, amíg az összekapcsolt blokkoló sorban van hely az elem beszúrására.

Például,

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

Kimenet

 LinkedBlockingQueue: (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 kapcsolt blokkoló sor elejéről használhatjuk a take()módszert.

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

Például,

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

Kimenet

 LinkedBlockingQueue: (Kutya, Macska) Eltávolított Elem: Kutya Új LinkedBlockingQueue: (Macska) 

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) Megkeresi a hivatkozott blokkoló várólistát a megadott elemre. Ha az elem megtalálható, akkor visszatér true, ha nem, akkor visszatér false.
size() Visszaadja a kapcsolt blokkolási sor hosszát.
toArray() A kapcsolt blokkoló várólistát tömbgé alakítja, és visszaadja a tömböt.
toString() A kapcsolt blokkoló várólistát karakterlánnyá alakítja

Miért érdemes használni a LinkedBlockingQueue programot?

Az LinkedBlockingQueueösszekapcsolt listákat használja belső tárhelyként.

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 az összekapcsolt blokkoló várakozási sor arra késztetheti a második szálat, amíg az első szál befejezi a műveletét.

érdekes cikkek...