Hvordan implementere BlockingQueue-grensesnitt i Java



Denne artikkelen vil gi deg detaljert og omfattende kunnskap om hvordan du implementerer et BlockingQueue-grensesnitt i Java.

En kø er et viktig aspekt av ethvert programmeringsspråk. Spesielt hvis vi snakker om . I denne artikkelen vil vi diskutere BlockingQueue-grensesnittet i Java i følgende rekkefølge:

Hva er et BlockingQueue-grensesnitt i Java?

Et BlockingQueue-grensesnitt i Java er en kø som blokkeres når du prøver å ryke fra den og køen er tom, eller hvis du prøver å legge inn elementer til den og køen allerede er full. En tråd som prøver å dequeue fra en tom kø er blokkert til en annen tråd setter inn et element i køen. En tråd som prøver å stoppe et element i en full kø, blokkeres til en annen tråd gir plass i køen, enten ved å dequeuere et eller flere elementer eller tømme køen helt.





prioritetskø i c ++

BlockingQueue-grensesnitt i Java godtar ikkenullverdier og kastNullPointerExceptionhvis du prøver å lagre nullverdien i køen.Java BlockingQueue-implementeringer er trådsikker . Alle kømetodene er atomare og bruker interne låser eller andre former for samtidskontroll.



Java kø klasse diagram

Java Queue interface utvider Collection-grensesnittet. Collection-grensesnittet utvider Iterable-grensesnittet. Noen av de ofte brukte køimplementeringsklassene er LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,etc .. AbstractQueue gir en skjelettimplementering av køgrensesnittet for å redusere innsatsen i implementering av kø.

BlockingQueue-typer

BlockingQueue er to typer:



  • Ubundet kø: Kapasiteten til den blokkerende køen vil bli satt til Integer.MAX_VALUE. I tilfelle ubegrenset blokkeringskø, vil køen aldri blokkeres fordi den kan vokse til en veldig stor størrelse. når du legger til elementer vokser størrelsen.

Syntaks:
BlockingQueue blocking queue = new LinkedBlockingDeque ()

  • Avgrenset kø: Den andre typen kø er den avgrensede køen. I tilfelle av den avgrensede køen kan du opprette en kø som omgår kapasiteten til køen i køkonstruktør:
    Syntaks:
    // Oppretter en blokkeringskø med kapasitet 5

BlockingQueue blocking queue = new LinkedBlockingDeque (5)

Metoder i BlockingQueue-grensesnitt

Endre type Metodesyntaks Brukt til Beskrivelse
boolsk legg til (E og) Innsetting

Setter inn det spesifiserte elementet i denne køen hvis det er mulig å gjøre det umiddelbart uten å bryte kapasitetsbegrensningene, returnere sant etter suksess og kaste et IllegalStateException hvis det ikke er ledig plass for øyeblikket.

boolsk inneholder (Objekt o) Undersøke

Returnerer sant hvis denne køen inneholder det angitte elementet.

int drainTo (samling c) Henter eller fjerner

Fjerner alle tilgjengelige elementer fra denne køen og legger dem til den gitte samlingen.

int drainTo (Collection c, int maxElements) Henter eller fjerner

Fjerner maksimalt det gitte antallet tilgjengelige elementer fra denne køen og legger dem til den gitte samlingen.

boolsk tilbud (E og) Innsetting

Setter det spesifiserte elementet inn i denne køen hvis det er mulig å gjøre det umiddelbart uten å bryte kapasitetsbegrensningene, og returnere true etter suksess og false hvis det ikke er ledig plass for øyeblikket.

boolsk tilbud (E e, lang tidsavbrudd, TimeUnit-enhet) Innsetting

Setter inn det angitte elementet i denne køen, og venter opp til den angitte ventetiden hvis nødvendig for at plass skal bli tilgjengelig.

ER meningsmåling (lang tidsavbrudd, TimeUnit-enhet) Henter eller fjerner

Henter og fjern hodet til denne køen, og venter opp til den angitte ventetiden om nødvendig for at et element skal bli tilgjengelig.

tomrom sette (E e) Innsetting

Setter inn det angitte elementet i denne køen, og venter om nødvendig på at plassen blir tilgjengelig.

int gjenværende kapasitet () Undersøke

Returnerer antall tilleggselementer som denne køen ideelt sett kan akseptere (i fravær av minne eller ressursbegrensninger) uten å blokkere, eller Integer.MAX_VALUE hvis det ikke er noen egen grense.

boolsk fjerne (Objekt o) + Henter eller fjerner

Fjerner en enkelt forekomst av det angitte elementet fra denne køen,hvis den er til stede.

forskjell mellom redskaper og utvider java
ER ta() Henter eller fjerner

Henter og fjern hodet til denne køen, og venter om nødvendig til et element blir tilgjengelig.

BlockingQueue-grensesnitt i Java Eksempel: Service

pakke com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// Opprette BlockingQueue av størrelse 10 BlockingQueue kø = ny ArrayBlocking 10) Produsentprodusent = ny produsent (kø) Forbrukerforbruker = ny forbruker (kø) // startprodusent for å produsere meldinger i kø ny tråd (produsent) .start () // startende forbruker for å konsumere meldinger fra kø ny tråd (forbruker) .start () System.out.println ('Produsent og forbruker er startet')}}

Med dette kommer vi til en slutt på BlockingQueue Interface i Java-artikkelen. Jeg håper alle konseptene dine er klare.

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 Interface in Java' -bloggen, så kommer vi tilbake til deg så snart som mulig.