Java LinkedBlockingQueue

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 returnerer falsehvis 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 returnerer nullhvis 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å importere java.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 returnerer nullhvis 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.

Interessante artikler...