Sådan implementeres BlockingQueue-interface i Java



Denne artikel giver dig en detaljeret og omfattende viden om, hvordan du implementerer et BlockingQueue-interface i Java.

En kø er et vigtigt aspekt af ethvert programmeringssprog. Især hvis vi taler om . I denne artikel vil vi diskutere BlockingQueue-grænsefladen i Java i følgende rækkefølge:

ordbog datastruktur i java

Hvad er et BlockingQueue-interface i Java?

En BlockingQueue-grænseflade i Java er en kø, der blokerer, når du prøver at skifte fra den, og køen er tom, eller hvis du prøver at lægge genstande på den, og køen allerede er fuld. En tråd, der prøver at skifte fra en tom kø, er blokeret, indtil en anden tråd indsætter et element i køen. En tråd, der forsøger at sætte et element i en fuld kø, er blokeret, indtil en anden tråd giver plads i køen, enten ved at dequeuere et eller flere emner eller rydde køen fuldstændigt.





prioritetskø i c ++

BlockingQueue-interface i Java accepterer ikkenulværdier og kastNullPointerExceptionhvis du prøver at gemme nulværdien i køen.Java BlockingQueue-implementeringer er trådsikker . Alle kømetoder er atomare og bruger interne låse eller andre former for samtidighedskontrol.



Java-kø-klassediagram

Java Queue-interface udvider Collection-grænsefladen. Samlingsgrænsefladen udvider den interterbare grænseflade. Nogle af de ofte anvendte køimplementeringsklasser er LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,osv. AbstractQueue giver en skeletimplementering af køgrænsefladen for at reducere indsatsen for at implementere kø.

BlockingQueue-typer

BlockingQueue er to typer:



  • Ubegrænset kø: Blokeringskøens kapacitet indstilles til Integer.MAX_VALUE. I tilfælde af ubegrænset blokeringskø blokerer køen aldrig, fordi den kan vokse til en meget stor størrelse. når du tilføjer elementer, vokser størrelsen.

Syntaks:
BlockingQueue blocking queue = new LinkedBlockingDeque ()

  • Afgrænset kø: Den anden type kø er den afgrænsede kø. I tilfælde af den afgrænsede kø kan du oprette en kø, der omgår køens kapacitet i køkonstruktøren:
    Syntaks:
    // Opretter en blokeringskø med kapacitet 5

BlockingQueue blocking queue = new LinkedBlockingDeque (5)

Metoder i BlockingQueue-interface

Skift type Metode syntaks Anvendes til Beskrivelse
boolsk tilføj (E og) Indskud

Indsætter det angivne element i denne kø, hvis det er muligt at gøre det straks uden at overtræde kapacitetsbegrænsninger, returnere sandt efter succes og kaste en IllegalStateException, hvis der ikke er plads i øjeblikket.

boolsk indeholder (Objekt o) Undersøge

Returnerer sandt, hvis denne kø indeholder det angivne element.

hvordan man indstiller Java-sti i Windows
int drainTo (samling c) Hentning eller fjernelse

Fjerner alle tilgængelige elementer fra denne kø og føjer dem til den givne samling.

int drainTo (Collection c, int maxElements) Hentning eller fjernelse

Fjerner højst det givne antal tilgængelige elementer fra denne kø og føjer dem til den givne samling.

boolsk tilbud (E og) Indskud

Indsætter det angivne element i denne kø, hvis det er muligt at gøre det med det samme uden at overtræde kapacitetsbegrænsninger, vender tilbage efter succes og falsk, hvis der ikke er plads i øjeblikket.

boolsk tilbud (E e, lang timeout, TimeUnit enhed) Indskud

Indsætter det angivne element i denne kø og venter op til den angivne ventetid, hvis det er nødvendigt for at plads bliver tilgængelig.

ER afstemning (lang timeout, TimeUnit enhed) Hentning eller fjernelse

Henter og fjerner hovedet på denne kø og venter op til den angivne ventetid, hvis det er nødvendigt for et element bliver tilgængeligt.

ugyldig sætte (E e) Indskud

Indsætter det angivne element i denne kø og venter om nødvendigt på, at der bliver plads.

hvad gør en linux-administrator
int resterende kapacitet () Undersøge

Returnerer antallet af yderligere elementer, som denne kø ideelt set kan accepteres (i mangel af hukommelse eller ressourcebegrænsninger) uden blokering, eller Integer.MAX_VALUE, hvis der ikke er nogen iboende grænse.

boolsk fjern (Objekt o) + Hentning eller fjernelse

Fjerner en enkelt forekomst af det angivne element fra denne kø,hvis det er til stede.

ER tage() Hentning eller fjernelse

Henter og fjerner hovedet på denne kø og venter om nødvendigt, indtil et element bliver tilgængeligt.

BlockingQueue-interface 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) {// Oprettelse af BlockingQueue af størrelse 10 BlockingQueue kø = ny ArrayBlocking 10) Producentproducent = ny producent (kø) Forbrugerforbruger = ny forbruger (kø) // startende producent til at producere meddelelser i kø ny tråd (producent) .start () // startforbruger til at forbruge meddelelser fra kø ny tråd (forbruger) .start () System.out.println ('Producent og forbruger er startet')}}

Med dette kommer vi til en ende af BlockingQueue Interface i Java-artiklen. Jeg håber, at alle dine koncepter nu er klare.

Tjek 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 på denne 'BlockingQueue-grænseflade i Java' -blog, og vi vender tilbage til dig hurtigst muligt.