Java LinkedBlockingQueue

I denne vejledning lærer vi om LinkedBLockingQueue-klassen og dens metoder ved hjælp af eksempler.

Den LinkedBlockingQueueklasse af Java Collectionsrammer giver det blokerende kø implementering ved hjælp af en sammenkædet liste.

Det implementerer Java BlockingQueue-grænsefladen.

Oprettelse af LinkedBlockingQueue

For at oprette en sammenkædet blokeringskø skal vi importere java.util.concurrent.LinkedBlockingQueuepakken.

Her er hvordan vi kan oprette en sammenkædet blokeringskø i Java:

1. Uden den oprindelige kapacitet

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Her er standard startkapacitet 2 31 -1.

2. Med den oprindelige kapacitet

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Her,

  • Type - typen af ​​den sammenkædede blokeringskø
  • kapacitet - størrelsen på den sammenkædede blokerende kø

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); 

Bemærk: Det er ikke obligatorisk at angive størrelsen på den linkede liste.

Metoder til LinkedBlockingQueue

Den LinkedBlockingQueueklasse giver gennemførelsen af alle de metoder i BlockingQueue interfacet.

Disse metoder bruges til at indsætte, få adgang til og slette elementer fra sammenkædede blokeringskøer.

Vi lærer også om to metoder, put()og take()som understøtter blokeringsoperationen i den sammenkædede blokerings kø.

Disse to metoder skelner den sammenkædede blokerende kø fra andre typiske køer.

Indsæt elementer

  • add()- Indsætter et specificeret element i den sammenkædede blokeringskø. Det giver en undtagelse, hvis køen er fuld.
  • offer()- Indsætter et specificeret element i den sammenkædede blokeringskø. Den vender tilbage, falsehvis køen er fuld.

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); ) ) 

Produktion

 LinkedBlockingQueue: (Hund, kat, hest) 

Adgangselementer

  • peek()- Returnerer et element fra forsiden af ​​den sammenkædede blokeringskø. Den vender tilbage, nullhvis køen er tom.
  • iterator()- Returnerer et iteratorobjekt for sekventielt at få adgang til et element fra den sammenkædede blokerende kø. Det giver en undtagelse, hvis køen er tom. Vi skal importere java.util.Iteratorpakken for at bruge 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(", "); ) ) ) 

Produktion

 LinkedBlockingQueue: (Dog, Cat, Horse) Accessed Element: Dog LinkedBlockingQueue Elements: Dog, Cat, Horse, 

Fjern elementer

  • remove()- Returnerer og fjerner et bestemt element fra den sammenkædede blokeringskø. Det giver en undtagelse, hvis køen er tom.
  • poll()- Returnerer og fjerner et bestemt element fra den sammenkædede blokeringskø. Den vender tilbage, nullhvis køen er tom.
  • clear() - Fjerner alle elementerne fra den sammenkædede blokeringskø.

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); ) ) 

Produktion

 LinkedBlockingQueue: (Hund, kat, hest) Fjernede elementer: Brug af remove (): Hund ved hjælp af afstemning (): Cat Opdateret LinkedBlockingQueue: () 

sæt () og tag () Metoder

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 indsætte det angivne element i slutningen af ​​en sammenkædet blokeringskø bruger vi put()metoden.

Hvis den sammenkædede blokerende kø er fuld, venter den, indtil der er plads i den sammenkædede blokerende kø til at indsætte 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); ) ) ) 

Produktion

 LinkedBlockingQueue: (Hund, kat) 

Her kan put()metoden smide en, InterruptedExceptionhvis 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 ​​den sammenkædede blokeringskø, kan vi bruge take()metoden.

Hvis den sammenkædede blokerende kø er tom, venter den, indtil der er elementer i den sammenkædede blokerende kø, der 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); ) ) ) 

Produktion

 LinkedBlockingQueue: (Dog, Cat) Fjernet element: Dog New LinkedBlockingQueue: (Cat) 

Her take()kaster metoden en, InterrupedExceptionhvis den afbrydes, mens du venter. Derfor skal vi lægge den inde i en try… catchblok.

Andre metoder

Metoder Beskrivelser
contains(element) Søger i den sammenkædede blokeringskø efter det angivne element. Hvis elementet findes, returnerer det true, hvis ikke det returnerer false.
size() Returnerer længden på den sammenkædede blokeringskø.
toArray() Konverterer sammenkædet blokerende kø til et array og returnerer arrayet.
toString() Konverterer den sammenkædede blokerende kø til streng

Hvorfor bruge LinkedBlockingQueue?

De LinkedBlockingQueueanvendelser knyttet lister som sin 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, så kan den sammenkædede blokerende kø få den anden tråd til at vente, indtil den første tråd gennemfører sine operationer.

Interessante artikler...