I denne opplæringen vil vi lære om LinkedBLockingQueue-klassen og dens metoder ved hjelp av eksempler.
Den LinkedBlockingQueue
klassen av Java Collections
rammeverk gir den blokkerer køen implementeringen ved hjelp av en lenket liste.
Den implementerer Java BlockingQueue-grensesnittet.
Opprette LinkedBlockingQueue
For å opprette en koblet blokkeringskø, må vi importere java.util.concurrent.LinkedBlockingQueue
pakken.
Slik kan vi opprette en koblet blokkeringskø i Java:
1. Uten startkapasiteten
LinkedBlockingQueue animal = new LinkedBlockingQueue();
Her vil standard startkapasitet være 2 31 -1.
2. Med den opprinnelige kapasiteten
LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity);
Her,
- Type - typen koblet blokkeringskø
- kapasitet - størrelsen på den koblede blokkeringskøen
For eksempel,
// Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5);
Merk: Det er ikke obligatorisk å oppgi størrelsen på den koblede listen.
Metoder for LinkedBlockingQueue
Den LinkedBlockingQueue
klasse gir gjennomføring av alle de metoder i den BlockingQueue grensesnittet.
Disse metodene brukes til å sette inn, få tilgang til og slette elementer fra koblede blokkeringskøer.
Vi vil også lære om to metoder put()
og take()
som støtter blokkeringsoperasjonen i den koblede blokkeringskøen.
Disse to metodene skiller den koblede blokkeringskøen fra andre typiske køer.
Sett inn elementer
add()
- Setter inn et spesifisert element i den koblede blokkeringskøen. Det kaster et unntak hvis køen er full.offer()
- Setter inn et spesifisert element i den koblede blokkeringskøen. Den returnererfalse
hvis køen er full.
For eksempel,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("LinkedBlockingQueue: " + animals); ) )
Produksjon
LinkedBlockingQueue: (Hund, katt, hest)
Tilgangselementer
peek()
- Returnerer et element fra forsiden av den koblede blokkeringskøen. Den returnerernull
hvis køen er tom.iterator()
- Returnerer et iteratorobjekt for sekvensielt å få tilgang til et element fra den koblede 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.LinkedBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("LinkedBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Produksjon
LinkedBlockingQueue: (Dog, Cat, Horse) Accessed Element: Dog LinkedBlockingQueue Elements: Dog, Cat, Horse,
Fjern elementer
remove()
- Returnerer og fjerner et spesifisert element fra den koblede blokkeringskøen. Det kaster et unntak hvis køen er tom.poll()
- Returnerer og fjerner et spesifisert element fra den koblede blokkeringskøen. Den returnerernull
hvis køen er tom.clear()
- Fjerner alle elementene fra den koblede blokkeringskøen.
For eksempel,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) )
Produksjon
LinkedBlockingQueue: (Hund, katt, hest) Fjernede elementer: Bruker remove (): Hund bruker avstemning (): Katt oppdatert LinkedBlockingQueue: ()
put () and take () Methods
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 () Metode
For å sette inn det spesifiserte elementet til slutten av en koblet blokkeringskø, bruker vi put()
metoden.
Hvis den koblede blokkeringskøen er full, venter den til det er plass i den koblede blokkeringskøen for å sette inn elementet.
For eksempel,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Produksjon
LinkedBlockingQueue: (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 den koblede blokkeringskøen, kan vi bruke take()
metoden.
Hvis den koblede blokkeringskøen er tom, venter den til det er elementer i den koblede blokkeringskøen som skal slettes.
For eksempel,
import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); System.out.println("New LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) )
Produksjon
LinkedBlockingQueue: (Dog, Cat) Fjernet Element: Dog New LinkedBlockingQueue: (Cat)
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 den koblede blokkeringskøen etter det angitte elementet. Hvis elementet er funnet, returnerer det true , hvis ikke det returnerer false . |
size() | Returnerer lengden på den koblede blokkeringskøen. |
toArray() | Konverterer koblet blokkeringskø til en matrise og returnerer matrisen. |
toString() | Konverterer den koblede blokkeringskøen til streng |
Hvorfor bruke LinkedBlockingQueue?
De LinkedBlockingQueue
anvendelser knyttet lister 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 den koblede blokkeringskøen få den andre tråden til å vente til den første tråden fullfører sine operasjoner.