Hvad er BlockingQueue i Java, og hvordan implementeres det?



Denne artikel om BlockingQueue i Java hjælper dig med at lære om BlockingQueue-grænsefladen. Det giver dig også indsigt i dets metoder og praktiske implementering

er ekstremt populær blandt programmører på grund af det omfattende udvalg af indbyggede funktioner. De fleste gange vil du have en dedikeret løsning på dit problem, selv før det vises. En sådan ekstremt nyttig og vigtig del af er BlockingQueue-grænsefladen i Java. Gennem mediet i denne artikel vil jeg kaste lidt lys over BlockingQueue i Java og metoderne til at implementere det.

Nedenfor er emnerne i denne artikel:





BlockingQueue-interface i Java

BlockingQueue i Java er en grænseflade, der blev tilføjet i Java 1.5 sammen med et par andre samtidige Utility-klasser som ConcurrentHashMap, CopyOnWriteArrrayList osv. BlockingQueue-interface hører til java.util.concurrent pakke .Denne grænseflade forbedrer strømningskontrol ved at aktivere blokering, hvis en tråd forsøger at dequeue en tom kø eller sætte en fuld kø i kø. I begge tilfælde er denne grænseflade praktisk.I enklere termer, antag at forsøger at tilføje elementer i en allerede fuld kø. På dette tidspunkt i programmet påkræves BlockingQueue, som blokerer den pågældende tråd, indtil en anden tråd frigiver køen for at skabe plads. Dette kan være et resultat af enten dequeuing af et eller flere element i hele køen. Tilsvarende vil BlockingQueue påberåbes for at blokere en tråd, der forsøger at dequeue en allerede tom kø, indtil nogle andre trådindsatser eller tilføjer et element i det tomme .

Når du arbejder med BlockingQueue-grænsefladen i Java, skal du huske, at den ikke accepterer en nulværdi. Hvis du prøver at gøre det, vil det straks kaste en NullPointerException. Nedenstående figur repræsenterer funktionen af ​​BlockingQueue-grænsefladen i Java.



BlockingQueue - BlockingQueue i Java - EdurekaDette interface bruges hovedsageligt mellem producent-forbrugere, da det er trådsikkert.Hvad jeg mener er at BlockingQueue-interface kan bruges til at oprette en kø, der kan deles af både producenten og forbrugeren

hvordan man bruger css sprites

For at arbejde med BlockingQueue i Java skal du først blive fortrolig med dens typer. Lad mig introducere dig for dem i det næste afsnit af denne artikel.

Typer af konstruktører til BlockingQueue i Java

Der er to typer konstruktører til BlockingQueue-interface i Java:



  • Ubundet kø: For denne type kø indstilles kapaciteten til Integer.MAX_VALUE. En ubegrænset kø blokeres aldrig, da den kan vokse dynamisk, hver gang et element indsættes i den. Nedenfor er syntaksen for at oprette en ubegrænset kø:
BlockingQueue bq = ny LinkedBlockingDeque ()
  • Afgrænset kø: For denne slags kø skal du passere køens kapacitet på tidspunktet for oprettelsen, dvs. som en Bygger parameter. Når størrelsen er tildelt, kan den ikke ændres. Nedenfor er syntaksen for at oprette en afgrænset kø:
BlockingQueue bq = ny LinkedBlockingDeque (10)

Nu hvor du er bekendt med måderne til at implementere BlockingQueue i Java, lad mig liste ned et par af dens metoder.

Metoder i BlockingQueue-interface

Metode Beskrivelse
boolsk tilføjelse (E e) Denne metode hjælper med at indsætte det angivne element i denne kø, hvis der er plads i køen ellers vil detsmide enIllegalStateException
boolsk indeholder (Objekt o) Denne metode returnerer sand, hvis køen indeholder det angivne element
int drainTo (samling c) Denne metode fjerner alle tilgængelige elementer fra køen og føjer dem til den angivne samling
int drainTo (Collection c, int maxElements) Denne metode fjerner ved det givne antal tilgængelige elementer fra køen og tilføjer dem til det angivne
boolønsk tilbud (E e) Denne metode indsætter det angivne element i køen, hvis det ikke er fuldt og returnerer sandt, ellers returnerer det falsk
boolsk tilbud (E e, lang timeout, TimeUnit enhed) Denne metode indsætter det angivne element i køen. Hvis køen er fuld, venter den op til den angivne ventetid, indtil pladsen bliver tilgængelig.
E-afstemning (lang timeout, TimeUnit-enhed) Denne metode hjælper med at hente og fjerne hovedet på køen. Hvis køen er tom, venter den op til den angivne ventetid, indtil et element bliver tilgængeligt
ugyldigt sæt (E e) Denne metode indsætter det angivne element i køen ved at vente på, at der bliver plads, hvis køen er fuld
int resterende kapacitet () Denne metode hjælper med at returnere antallet af yderligere elementer, som denne kø ideelt kan acceptere uden at blive blokeret
boolsk fjernelse (Objekt o) Denne metode fjerner kun en enkelt forekomst af det angivne element fra køen, hvis det er til stede
E tage () Denne metode hjælper med at hente og fjerne hovedet på køen ved at vente på, at et element bliver tilgængeligt, hvis køen er tom.

BlockingQueue-implementeringer

Her vil jeg implementere et simpelt eksempel på BlockingQueue i Java hvorklasse EduProducer genererer dataene og indsætter dem i en , samtidig, en anden klasse, EduConsumer fjerner dataene fra den samme kø.

Til dette vil jeg oprette 3 klasser, nemlig:

  1. EduProducer
  2. EduConsumer
  3. Edureka Hoved

Lad os nu oprette hver af disse klasser en efter en.

mysql_fetch_array

EduProducer.java

pakke edureka import java.util.concurrent.BlockingQueue public class EduProducer implementerer Runnable {privat final BlockingQueue kø @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } privat ugyldig proces () kaster InterruptedException {// Sæt 10 in i kø for (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

pakke edureka import java.util.concurrent.BlockingQueue offentlig klasse EduConsumer implementerer Kørbar {privat endelig BlockingQueue kø @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} privat ugyldig proces (heltal tager) kaster InterruptedException {System.out.println ('[Consumer] Fjern:' + take) Thread.sleep (500)} public EduConsumer (BlockingQueue-kø) {this.queue = kø}}

EdurekaMain.java

pakke edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue public class EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (queue)) .start () ny tråd (ny EduConsumer (kø)). start ()}}

Når du er færdig med at skrive koden, skal du udføre programmet for at få nedenstående output:

[Producent] Tilføj: 0 [Forbruger] Take: 0 [Producer] Køens resterende kapacitet: 9 [Producent] Tilføj: 1 [Producent] Køens resterende kapacitet: 9 [Producent] Tilføj: 2 [Producer] Køens resterende kapacitet: 8 [Producent ] Tilføj: 3 [Producent] Køens resterende kapacitet: 7 [Forbruger] Take: 1 [Producent] Tilføj: 4 [Producent] Køens resterende kapacitet: 7 [Producent] Tilføj: 5 [Producent] Køens resterende kapacitet: 6 [Producent] Tilføj : 6 [Producer] Køens resterende kapacitet: 5 [Forbruger] Take: 2 [Producent] Tilføj: 7 [Producent] Køens resterende kapacitet: 5 [Producent] Tilføj: 8 [Producer] Køens resterende kapacitet: 4 [Producent] Tilføj: 9 [Producent] Køens resterende kapacitet: 3 [Forbruger] Take: 3 [Forbruger] Take: 4 [Forbruger] Take: 5 [Forbruger] Take: 6 [Forbruger] Take: 7 [Forbruger] Take: 8 [Forbruger] Take: 9

Dette bringer os til slutningen af ​​denne artikel om BlockingQueue i Java. Hvis du ønsker at lære Java mere detaljeret, kan du henvise til vores såvel.

Nu hvor du har forstået det grundlæggende i BlockingQueue i Java, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-kursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne “BlockingQueue in Java”, og vi vender tilbage til dig hurtigst muligt.