I den här handledningen lär vi oss om ArrayBlockingQueue-klassen och dess metoder med hjälp av exempel.
Den ArrayBlockingQueue
klass av ramen för Java Samlingar ger blockeringsskön implementering med användning av en matris.
Den implementerar Java BlockingQueue-gränssnittet.
Skapa ArrayBlockingQueue
För att skapa en matrisblockerande kö måste vi importera java.util.concurrent.ArrayBlockingQueue
paketet.
När vi väl har importerat paketet, så här kan vi skapa en matrisblockerande kö i Java:
ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity);
Här,
- Typ - typen av matrisblockerande kö
- kapacitet - storleken på array-blockeringskön
Till exempel,
// Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5);
Obs! Det är obligatoriskt att ange storleken på matrisen.
Metoder för ArrayBlockingQueue
I ArrayBlockingQueue
klassen ger genomförandet av alla metoder i BlockingQueue
gränssnittet.
Dessa metoder används för att infoga, komma åt och ta bort element från matrisblockerande köer.
Vi kommer också att lära oss om två metoder put()
och take()
som stöder blockeringsoperationen i array-blockeringskön.
Dessa två metoder skiljer array-blockeringskön från andra typiska köer.
Sätt in element
add()
- Infogar det angivna elementet i array-blockeringskön. Det ger ett undantag om kön är full.offer()
- Infogar det angivna elementet i array-blockeringskön. Den returnerarfalse
om kön är full.
Till exempel,
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); ) )
Produktion
ArrayBlockingQueue: (Hund, katt, häst)
Åtkomstelement
peek()
- Returnerar ett element framifrån i array-blockeringskön. Den returnerarnull
om kön är tom.iterator()
- Returnerar ett iteratorobjekt för att sekventiellt komma åt element från array-blockeringskön. Det ger ett undantag om kön är tom. Vi måste importerajava.util.Iterator
paketet för att kunna använda det.
Till exempel,
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(", "); ) ) )
Produktion
ArrayBlockingQueue: (Dog, Cat, Horse) Accessed Element: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse,
Ta bort element
remove()
- Returnerar och tar bort ett angivet element från array-blockeringskön. Det ger ett undantag om kön är tom.poll()
- Returnerar och tar bort ett visst element från array-blockeringskön. Den returnerarnull
om kön är tom.clear()
- Tar bort alla element från array-blockeringskön.
Till exempel,
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); ) )
Produktion
ArrayBlockingQueue: (Hund, katt, häst) Borttagna element: Använd remove (): Hund använder poll (): Cat Uppdaterad ArrayBlockingQueue: ()
sätt () och ta () Metod
I flertrådningsprocesser kan vi använda put()
och take()
blockera funktionen för en tråd för att synkronisera den med en annan tråd. Dessa metoder väntar tills de kan köras framgångsrikt.
put () metod
För att lägga till ett element i slutet av en matrisblockerande kö kan vi använda put()
metoden.
Om array-blockeringskön är full väntar den tills det finns utrymme i array-blockeringskön för att lägga till ett element.
Till exempel,
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); ) ) )
Produktion
ArrayBlockingQueue: (Hund, katt)
Här kan put()
metoden kasta en InterruptedException
om den avbryts medan du väntar. Därför måste vi bifoga det i ett försök … fångstblock.
ta () Metod
För att returnera och ta bort ett element från matrisblockeringskön, kan vi använda take()
metoden.
Om array-blockeringskön är tom väntar den tills det finns element i array-blockeringskön som ska raderas.
Till exempel,
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); ) ) )
Produktion
ArrayBlockingQueue: (Hund, katt) Borttaget element: Hund
Här kommer take()
metoden att kasta en InterrupedException
om den avbryts medan du väntar. Därför måste vi stänga det i ett try… catch
block.
Andra metoder
Metoder | Beskrivningar |
---|---|
contains(element) | Söker i array-blockeringskön efter det angivna elementet. Om elementet hittas returnerar det true , om inte det returnerar false . |
size() | Returnerar längden på array-blockeringskön. |
toArray() | Konverterar matrisblockerande kö till en matris och returnerar den. |
toString() | Konverterar array-blockeringskön till sträng |
Varför använda ArrayBlockingQueue?
De ArrayBlockingQueue
användningar samlingama som dess inre lagring.
Det betraktas som en trådsäker samling. Därför används det vanligtvis i applikationer med flera trådar.
Antag att en tråd sätter in element i kön och en annan tråd tar bort element från kön.
Nu, om den första tråden är långsammare än den andra tråden, kan array-blockeringskön få den andra tråden att vänta tills den första tråden slutför sina operationer.