Java LinkedBlockingQueue

I denna handledning lär vi oss om klassen LinkedBLockingQueue och dess metoder med hjälp av exempel.

Den LinkedBlockingQueueklass av Java Collectionsramverket ger blockerings kön genomförandet med hjälp av en länkad lista.

Den implementerar Java BlockingQueue-gränssnittet.

Skapa LinkedBlockingQueue

För att skapa en länkad blockeringskö måste vi importera java.util.concurrent.LinkedBlockingQueuepaketet.

Så här kan vi skapa en länkad blockeringskö i Java:

1. Utan den initiala kapaciteten

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Här är standardstartkapaciteten 2 31 -1.

2. Med den initiala kapaciteten

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Här,

  • Typ - typen av den länkade blockeringskön
  • kapacitet - storleken på den länkade blockeringskön

Till exempel,

 // Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5); 

Obs! Det är inte obligatoriskt att ange storleken på den länkade listan.

Metoder för LinkedBlockingQueue

I LinkedBlockingQueueklassen ger genomförandet av alla metoder i BlockingQueue gränssnittet.

Dessa metoder används för att infoga, komma åt och ta bort element från länkade blockeringsköer.

Vi kommer också att lära oss om två metoder put()och take()som stöder blockeringsoperationen i den länkade blockeringskön.

Dessa två metoder skiljer den länkade blockeringskön från andra typiska köer.

Sätt in element

  • add()- Infogar ett angivet element i den länkade blockeringskön. Det ger ett undantag om kön är full.
  • offer()- Infogar ett angivet element i den länkade blockeringskön. Den returnerar falseom kön är full.

Till exempel,

 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, katt, häst) 

Åtkomstelement

  • peek()- Returnerar ett element från framsidan av den länkade blockeringskön. Den returnerar nullom kön är tom.
  • iterator()- Returnerar ett iteratorobjekt för att sekventiellt komma åt ett element från den länkade blockeringskön. Det ger ett undantag om kön är tom. Vi måste importera java.util.Iteratorpaketet för att kunna använda det.

Till exempel,

 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, 

Ta bort element

  • remove()- Returnerar och tar bort ett angivet element från den länkade blockeringskön. Det ger ett undantag om kön är tom.
  • poll()- Returnerar och tar bort ett angivet element från den länkade blockeringskön. Den returnerar nullom kön är tom.
  • clear() - Tar bort alla element från den länkade blockeringskön.

Till exempel,

 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, katt, häst) Borttagna element: Använd remove (): Hund använder poll (): Cat Uppdaterad LinkedBlockingQueue: () 

sätt () och ta () metoder

I flertrådningsprocesser kan vi använda put()och take()blockera funktionen för en tråd för att synkronisera den med en annan tråd. Dessa metoder väntar tills de kan köras framgångsrikt.

put () Metod

För att infoga det angivna elementet i slutet av en länkad blockeringskö använder vi put()metoden.

Om den länkade blockeringskön är full väntar den tills det finns utrymme i den länkade blockeringskön för att infoga elementet.

Till exempel,

 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, katt) 

Här kan put()metoden kasta en InterruptedExceptionom den avbryts medan du väntar. Därför måste vi bifoga det i ett försök … fångstblock.

ta () Metod

För att returnera och ta bort ett element från framsidan av den länkade blockeringskön kan vi använda take()metoden.

Om den länkade blockeringskön är tom väntar den tills det finns element i den länkade blockeringskön som ska raderas.

Till exempel,

 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) Borttaget element: Dog New LinkedBlockingQueue: (Cat) 

Här kommer take()metoden att kasta en InterrupedExceptionom den avbryts medan du väntar. Därför måste vi stänga det i ett try… catchblock.

Andra metoder

Metoder Beskrivningar
contains(element) Söker i den länkade blockeringskön efter det angivna elementet. Om elementet hittas returnerar det true, om inte det returneras false.
size() Returnerar längden på den länkade blockeringskön.
toArray() Konverterar länkad blockeringskö till en matris och returnerar matrisen.
toString() Konverterar den länkade blockeringskön till sträng

Varför använda LinkedBlockingQueue?

De LinkedBlockingQueueanvänder länkade listor som intern lagring.

Det betraktas som en trådsäker samling. Därför används det vanligtvis i applikationer med flera trådar.

Antag att en tråd sätter in element i kön och en annan tråd tar bort element från kön.

Nu, om den första tråden är långsammare än den andra tråden, kan den länkade blockeringskön göra att den andra tråden väntar tills den första tråden slutför sina operationer.

Intressanta artiklar...