Java ArrayBlockingQueue

I den här handledningen lär vi oss om ArrayBlockingQueue-klassen och dess metoder med hjälp av exempel.

Den ArrayBlockingQueueklass 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.ArrayBlockingQueuepaketet.

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 ArrayBlockingQueueklassen ger genomförandet av alla metoder i BlockingQueuegrä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 returnerar falseom 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 returnerar nullom 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 importera java.util.Iteratorpaketet 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 returnerar nullom 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 InterruptedExceptionom 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 InterrupedExceptionom den avbryts medan du väntar. Därför måste vi stänga det i ett try… catchblock.

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 ArrayBlockingQueueanvä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.

Intressanta artiklar...