I denna handledning lär vi oss om klassen LinkedBLockingQueue och dess metoder med hjälp av exempel.
Den LinkedBlockingQueue
klass av Java Collections
ramverket 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.LinkedBlockingQueue
paketet.
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 LinkedBlockingQueue
klassen 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 returnerarfalse
om 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 returnerarnull
om 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 importerajava.util.Iterator
paketet 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 returnerarnull
om 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 InterruptedException
om 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 InterrupedException
om den avbryts medan du väntar. Därför måste vi stänga det i ett try… catch
block.
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 LinkedBlockingQueue
anvä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.