I denne opplæringen lærer vi om ArrayBlockingQueue-klassen og dens metoder ved hjelp av eksempler.
Den ArrayBlockingQueue
klassen av Java Collections rammeverket gir den blokkerer køen implementeringen ved hjelp av en matrise.
Den implementerer Java BlockingQueue-grensesnittet.
Opprette ArrayBlockingQueue
For å opprette en array-blokkeringskø, må vi importere java.util.concurrent.ArrayBlockingQueue
pakken.
Når vi har importert pakken, kan du opprette en array-blokkeringskø i Java:
ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity);
Her,
- Type - typen matriseblokkeringskø
- kapasitet - størrelsen på array-blokkeringskø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);
Merk: Det er obligatorisk å oppgi størrelsen på matrisen.
Metoder for ArrayBlockingQueue
Den ArrayBlockingQueue
klasse gir gjennomføring av alle de metoder i BlockingQueue
grensesnittet.
Disse metodene brukes til å sette inn, få tilgang til og slette elementer fra mateblokkeringskøer.
Vi vil også lære om to metoder put()
og take()
som støtter blokkeringsoperasjonen i array-blokkeringskøen.
Disse to metodene skiller array-blokkeringskøen fra andre typiske køer.
Sett inn elementer
add()
- Setter inn det angitte elementet i array-blokkeringskøen. Det kaster et unntak hvis køen er full.offer()
- Setter inn det angitte elementet i array-blokkeringskøen. Den returnererfalse
hvis køen er full.
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); ) )
Produksjon
ArrayBlockingQueue: (Hund, katt, hest)
Tilgangselementer
peek()
- Returnerer et element fra forsiden av array-blokkeringskøen. Den returnerernull
hvis køen er tom.iterator()
- Returnerer et iteratorobjekt for sekvensielt å få tilgang til elementer fra array-blokkeringskøen. Det kaster et unntak hvis køen er tom. Vi må importerejava.util.Iterator
pakken for å bruke 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(", "); ) ) )
Produksjon
ArrayBlockingQueue: (Dog, Cat, Horse) Accessed Element: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse,
Fjern elementer
remove()
- Returnerer og fjerner et spesifisert element fra array-blokkeringskøen. Det kaster et unntak hvis køen er tom.poll()
- Returnerer og fjerner et spesifisert element fra array-blokkeringskøen. Den returnerernull
hvis køen er tom.clear()
- Fjerner alle elementene fra array-blokkeringskø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); ) )
Produksjon
ArrayBlockingQueue: (Hund, katt, hest) Fjernede elementer: Bruker remove (): Hund bruker avstemning (): Cat Oppdatert ArrayBlockingQueue: ()
put () and take () Metode
I flertrådingsprosesser kan vi bruke put()
og take()
blokkere driften av en tråd for å synkronisere den med en annen tråd. Disse metodene vil vente til de kan utføres.
put () -metoden
For å legge til et element på slutten av en matriseblokkeringskø, kan vi bruke put()
metoden.
Hvis array-blokkeringskøen er full, venter den til det er plass i array-blokkeringskøen for å legge til 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); ) ) )
Produksjon
ArrayBlockingQueue: (Hund, katt)
Her kan put()
metoden kaste en InterruptedException
hvis den blir avbrutt mens du venter. Derfor må vi legge den inn i en prøve … fangstblokk.
ta () Metode
For å returnere og fjerne et element fra forsiden av array-blokkeringskøen, kan vi bruke take()
metoden.
Hvis array-blokkeringskøen er tom, venter den til det er elementer i array-blokkeringskøen som 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); ) ) )
Produksjon
ArrayBlockingQueue: (Dog, Cat) Fjernet Element: Dog
Her vil take()
metoden kaste en InterrupedException
hvis den blir avbrutt mens du venter. Derfor må vi legge den inn i en try… catch
blokk.
Andre metoder
Metoder | Beskrivelser |
---|---|
contains(element) | Søker i array-blokkeringskøen etter det angitte elementet. Hvis elementet blir funnet, returnerer det true , hvis ikke det returnerer false . |
size() | Returnerer lengden på array-blokkeringskøen. |
toArray() | Konverterer matriseblokkeringskø til en matrise og returnerer den. |
toString() | Konverterer array-blokkeringskøen til streng |
Hvorfor bruke ArrayBlockingQueue?
De ArrayBlockingQueue
anvendelser arrays som den interne lagring.
Det betraktes som en trådsikker samling. Derfor brukes den vanligvis i applikasjoner med flere tråder.
Anta at en tråd setter inn elementer i køen, og en annen tråd fjerner elementer fra køen.
Nå, hvis den første tråden er tregere enn den andre tråden, kan array-blokkeringskøen få den andre tråden til å vente til den første tråden fullfører sine operasjoner.