Ebben az oktatóanyagban példák segítségével megismerhetjük az ArrayBlockingQueue osztályt és annak módszereit.
A ArrayBlockingQueue
Java 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.ArrayBlockingQueue
csomagot.
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 ArrayBlockingQueue
osztály biztosítja az BlockingQueue
interfé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,false
ha 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,null
ha 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 ajava.util.Iterator
csomagot.
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,null
ha 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, InterruptedException
ha 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, InterrupedException
ha várakozás közben megszakad. Ezért be kell zárnunk egy try… catch
blokkba.
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 ArrayBlockingQueue
tö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.