Hva er BlockingQueue i Java og hvordan implementerer du det?



Denne artikkelen om BlockingQueue i Java vil hjelpe deg å lære om BlockingQueue-grensesnittet. Det vil også gi deg innsikt i metodene og den praktiske implementeringen

er ekstremt populær blant programmerere på grunn av det omfattende utvalget av innebygde funksjoner. De fleste ganger vil du ha en dedikert løsning for problemet ditt allerede før det dukker opp. En så ekstremt nyttig og viktig del av er BlockingQueue-grensesnittet i Java. Gjennom mediet i denne artikkelen vil jeg kaste litt lys over BlockingQueue i Java og metodene for å implementere den.

Nedenfor er emnene dekket i denne artikkelen:





BlockingQueue-grensesnitt i Java

BlockingQueue i Java er et grensesnitt som ble lagt til i Java 1.5 sammen med noen få andre samtidige verktøyklasser som ConcurrentHashMap, CopyOnWriteArrrayList osv. BlockingQueue-grensesnittet tilhører java.util.concurrent pakke .Dette grensesnittet forbedrer strømningskontrollen ved å aktivere blokkering, i tilfelle en tråd prøver å dequeue en tom kø eller innstille en full kø. I begge tilfeller kommer dette grensesnittet til nytte.I enklere termer, anta a prøver å legge til elementer i en allerede full kø. På dette punktet i programmet vil BlockingQueue påberopes som vil blokkere den aktuelle tråden til en annen tråd frigjør køen for å få plass. Dette kan være et resultat av enten dequeuing av et element (er) til klarering av hele køen. På samme måte blir BlockingQueue påkalt for å blokkere en tråd som prøver å dequeue en allerede tom kø til noen andre tråder setter inn eller legger til et element i det tomme .

kan du utvide og implementere i java

Mens du arbeider med BlockingQueue-grensesnittet i Java, må du huske at det ikke godtar en nullverdi. I tilfelle du prøver å gjøre det, vil det umiddelbart kaste et NullPointerException. Figuren nedenfor representerer arbeidet med BlockingQueue-grensesnittet i Java.



BlockingQueue - BlockingQueue i Java - EdurekaDette grensesnitt brukes hovedsakelig mellom produsent-forbrukere da det er trådsikkert.Det jeg mener er at BlockingQueue-grensesnittet kan brukes til å lage en kø som kan deles av både produsent og forbruker

For å kunne jobbe med BlockingQueue i Java, må du først bli kjent med typene. La meg introdusere deg for dem i neste del av denne artikkelen.

Typer konstruktører for BlockingQueue i Java

Det er to typer konstruktører for BlockingQueue-grensesnitt i Java:



  • Ubundet kø: For denne typen kø blir kapasiteten satt til Integer.MAX_VALUE. En ubegrenset kø vil aldri bli blokkert ettersom den kan vokse dynamisk, hver gang et element settes inn i den. Nedenfor er syntaksen for å opprette en ubegrenset kø:
BlockingQueue bq = ny LinkedBlockingDeque ()
  • Avgrenset kø: For denne typen kø må du passere køens kapasitet på tidspunktet for opprettelsen, dvs. som en bygger parameter. Når størrelsen er tildelt, kan den ikke endres. Nedenfor er syntaksen for å opprette en begrenset kø:
BlockingQueue bq = ny LinkedBlockingDeque (10)

Nå som du er kjent med måtene å implementere BlockingQueue i Java, la meg liste opp noen av metodene.

Metoder i BlockingQueue-grensesnitt

Metode Beskrivelse
boolsk tilsetning (E e) Denne metoden hjelper med å sette inn det angitte elementet i denne køen hvis det er plass i køen ellers vil denkaste enIllegalStateException
boolsk inneholder (Objekt o) Denne metoden returnerer sant hvis køen inneholder det angitte elementet
int drainTo (samling c) Denne metoden vil fjerne alle tilgjengelige elementer fra køen og legge dem til den angitte samlingen
int drainTo (Collection c, int maxElements) Denne metoden vil fjerne ved et gitt antall tilgjengelige elementer fra køen og legge dem til i det angitte
booloean tilbud (E e) Denne metoden vil sette det spesifiserte elementet inn i køen hvis det ikke er fullt og returnere true, ellers vil det returnere false
boolsk tilbud (E e, lang tidsavbrudd, TimeUnit-enhet) Denne metoden setter inn det angitte elementet i køen. Hvis køen er full, vil den vente til den angitte ventetiden for at plassen skal bli tilgjengelig.
E-avstemning (lang tidsavbrudd, TimeUnit-enhet) Denne metoden hjelper til med å hente og fjerne hodet på køen. I tilfelle køen er tom, vil den vente opp til den angitte ventetiden til et element blir tilgjengelig
void put (E e) Denne metoden vil sette det spesifiserte elementet inn i køen ved å vente på at plassen blir tilgjengelig i tilfelle køen er full
int gjenværende kapasitet () Denne metoden hjelper med å returnere antall tilleggselementer som denne køen ideelt sett kan godta uten å bli blokkert
boolsk fjerning (Objekt o) Denne metoden vil bare fjerne en enkelt forekomst av det angitte elementet fra køen hvis det er til stede
E ta () Denne metoden vil hjelpe til med å hente og fjerne hodet til køen ved å vente på at et element blir tilgjengelig, i tilfelle køen er tom.

BlockingQueue-implementeringer

Her vil jeg implementere et enkelt eksempel på BlockingQueue i Java hvorklasse EduProducer vil generere dataene og sette dem inn i en , samtidig, en annen klasse, vil EduConsumer fjerne dataene fra samme kø.

For dette vil jeg lage tre klasser, nemlig:

  1. EduProducer
  2. EduConsumer
  3. Edureka Hoved

La oss nå lage hver av disse klassene en etter en.

EduProducer.java

hvordan lager jeg et Java-program
pakke edureka importerer java.util.concurrent.BlockingQueue offentlig klasse EduProducer implementerer Runnable {private final BlockingQueue kø @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } privat ugyldig prosess () kaster InterruptedException {// Sett 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 Kjørbar {privat slutt BlockingQueue kø @ Override offentlig tomrom kjøre () {prøv {mens (sant) {Heltall ta = kø.take () prosess (ta)}} fang (InterruptedException e) {Thread.currentThread (). Interrupt ()}} privat ugyldig prosess (Integer take) kaster InterruptedException {System.out.println ('[Consumer] Fjern:' + take) Thread.sleep (500)} offentlig 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 ferdig med å skrive koden, kan du utføre programmet for å få utdataene nedenfor:

hvordan du driver kraft i python
[Produsent] Legg til: 0 [Forbruker] Ta: 0 [Produsent] Køens gjenværende kapasitet: 9 [Produsent] Legg til: 1 [Produsent] Køens gjenværende kapasitet: 9 [Produsent] Legg til: 2 [Produsent] Køens gjenværende kapasitet: 8 [Produsent ] Legg til: 3 [Producer] Køens gjenværende kapasitet: 7 [Forbruker] Take: 1 [Producer] Legg til: 4 [Producer] Køens gjenværende kapasitet: 7 [Producer] Legg til: 5 [Producer] Køens gjenværende kapasitet: 6 [Producer] Legg til : 6 [Produsent] Resterende kapasitet: 5 [Forbruker] Ta: 2 [Produsent] Legg til: 7 [Produsent] Køens gjenværende kapasitet: 5 [Produsent] Legg til: 8 [Produsent] Køens gjenværende kapasitet: 4 [Produsent] Legg til: 9 [Producer] Køens gjenværende kapasitet: 3 [Forbruker] Ta: 3 [Forbruker] Ta: 4 [Forbruker] Ta: 5 [Forbruker] Ta: 6 [Forbruker] Ta: 7 [Forbruker] Ta: 8 [Forbruker] Ta: 9

Dette bringer oss til slutten av denne artikkelen om BlockingQueue i Java. Hvis du ønsker å lære Java mer detaljert, kan du se vår også.

Nå som du har forstått det grunnleggende om BlockingQueue i Java, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'BlockingQueue in Java', så kommer vi tilbake til deg så snart som mulig.