I denne vejledning lærer vi om ArrayBlockingQueue-klassen og dens metoder ved hjælp af eksempler.
Den ArrayBlockingQueue
klasse 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.ArrayBlockingQueue
pakken.
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 ArrayBlockingQueue
klasse giver gennemførelsen af alle de metoder i BlockingQueue
interfacet.
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,false
hvis 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,null
hvis 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 importerejava.util.Iterator
pakken 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,null
hvis 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, InterruptedException
hvis 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, InterrupedException
hvis den afbrydes, mens du venter. Derfor skal vi lægge den inde i en try… catch
blok.
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 ArrayBlockingQueue
anvendelser 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.