Java ArrayBlockingQueue

I denne vejledning lærer vi om ArrayBlockingQueue-klassen og dens metoder ved hjælp af eksempler.

Den ArrayBlockingQueueklasse af rammerne Java Samlinger giver det blokerende kø implementering ved hjælp af et array.

Det implementerer Java BlockingQueue-grænsefladen.

Oprettelse af ArrayBlockingQueue

For at oprette en matrixblokeringskø skal vi importere java.util.concurrent.ArrayBlockingQueuepakken.

Når vi først har importeret pakken, kan vi her oprette en matrixblokerende kø i Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Her,

  • Type - typen af ​​matrixblokeringskøen
  • kapacitet - størrelsen på array-blokeringskøen

For eksempel,

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

Bemærk: Det er obligatorisk at angive størrelsen på arrayet.

Metoder til ArrayBlockingQueue

Den ArrayBlockingQueueklasse giver gennemførelsen af alle de metoder i BlockingQueueinterfacet.

Disse metoder bruges til at indsætte, få adgang til og slette elementer fra array-blokerende køer.

Vi lærer også om to metoder, put()og take()som understøtter blokeringsoperationen i array-blokerings køen.

Disse to metoder skelner mellem array-blokeringskøen og andre typiske køer.

Indsæt elementer

  • add()- Indsætter det angivne element i array-blokeringskøen. Det giver en undtagelse, hvis køen er fuld.
  • offer()- Indsætter det angivne element i array-blokeringskøen. Den vender tilbage, falsehvis køen er fuld.

For eksempel,

 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, kat, hest) 

Adgangselementer

  • peek()- Returnerer et element fra forsiden af ​​arrayblokeringskøen. Den vender tilbage, nullhvis køen er tom.
  • iterator()- Returnerer et iteratorobjekt for sekventielt at få adgang til elementer fra arrayblokeringskøen. Det giver en undtagelse, hvis køen er tom. Vi skal importere java.util.Iteratorpakken for at bruge den.

For eksempel,

 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, 

Fjern elementer

  • remove()- Returnerer og fjerner et specificeret element fra arrayblokeringskøen. Det giver en undtagelse, hvis køen er tom.
  • poll()- Returnerer og fjerner et specificeret element fra arrayblokeringskøen. Den vender tilbage, nullhvis køen er tom.
  • clear() - Fjerner alle elementerne fra array-blokeringskøen.

For eksempel,

 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, kat, hest) Fjernede elementer: Brug af remove (): Hund ved hjælp af afstemning (): Cat Opdateret ArrayBlockingQueue: () 

sæt () og tag () Metode

I multitrådningsprocesser kan vi bruge put()og take()blokere driften af ​​en tråd til at synkronisere den med en anden tråd. Disse metoder venter, indtil de kan udføres med succes.

put () metode

For at tilføje et element i slutningen af ​​en matrixblokeringskø kan vi bruge put()metoden.

Hvis matrixblokeringskøen er fuld, venter den, indtil der er plads i arrayblokeringskøen til at tilføje et element.

For eksempel,

 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, kat) 

Her kan put()metoden smide en, InterruptedExceptionhvis den afbrydes, mens du venter. Derfor skal vi vedlægge den i en prøve … fangstblok.

tage () metode

For at returnere og fjerne et element fra forsiden af ​​arrayblokeringskøen kan vi bruge take()metoden.

Hvis matrixblokeringskøen er tom, venter den, indtil der er elementer i matrixblokeringskøen, der skal slettes.

For eksempel,

 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, kat) Fjernet element: Hund 

Her take()kaster metoden en, InterrupedExceptionhvis den afbrydes, mens du venter. Derfor skal vi lægge den inde i en try… catchblok.

Andre metoder

Metoder Beskrivelser
contains(element) Søger i array-blokeringskøen efter det angivne element. Hvis elementet findes, returnerer det true, hvis ikke det returnerer false.
size() Returnerer længden af ​​den array-blokerende kø.
toArray() Konverterer array-blokerende kø til en array og returnerer den.
toString() Konverterer array-blokerende kø til streng

Hvorfor bruge ArrayBlockingQueue?

De ArrayBlockingQueueanvendelser arrays som dens interne lager.

Det betragtes som en trådsikker samling. Derfor bruges det generelt i applikationer med flere tråde.

Antag, at en tråd indsætter elementer i køen, og en anden tråd fjerner elementer fra køen.

Hvis den første tråd nu er langsommere end den anden tråd, kan arrayblokeringskøen få den anden tråd til at vente, indtil den første tråd fuldfører sine operationer.

Interessante artikler...