I denne opplæringen vil vi lære om LinkedBLockingQueue-klassen og dens metoder ved hjelp av eksempler.
Den LinkedBlockingQueueklassen av Java Collectionsrammeverk 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.LinkedBlockingQueuepakken.
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 LinkedBlockingQueueklasse 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 returnererfalsehvis 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 returnerernullhvis 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.Iteratorpakken 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 returnerernullhvis 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 InterruptedExceptionhvis 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 InterrupedExceptionhvis den blir avbrutt mens du venter. Derfor må vi legge den inn i en try… catchblokk.
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 LinkedBlockingQueueanvendelser 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.








