Kas ir BlockingQueue Java un kā to ieviest?



Šis raksts par Java BlockingQueue palīdzēs jums uzzināt par BlockingQueue saskarni. Tas arī sniegs ieskatu par tā metodēm un praktisko ieviešanu

ir ārkārtīgi populārs programmētāju vidū, pateicoties visaptverošajam iebūvēto funkciju klāstam. Lielāko daļu gadījumu jums būs īpašs risinājums jūsu problēmai pat pirms tās parādīšanās. Tik ārkārtīgi noderīga un svarīga ir Java saskarne BlockingQueue. Izmantojot šo rakstu, es nedaudz izskaidrošu Java bloķēšanas rindu un tās ieviešanas metodes.

Tālāk ir norādītas šajā rakstā aplūkotās tēmas:





BlockingQueue saskarne Java

Java bloķēšanas rinda ir interfeiss, kas tika pievienots Java 1.5 kopā ar dažām citām vienlaicīgām utilītu klasēm, piemēram, ConcurrentHashMap, CopyOnWriteArrrayList utt. Saskarne BlockingQueue pieder java.util.concurrent iepakojums .Šī saskarne uzlabo plūsmas kontroli, aktivizējot bloķēšanu, ja pavediens mēģina atcelt tukšu rindu vai izveidot pilnu rindu. Jebkurā gadījumā šī saskarne ir noderīga.Vienkāršāk sakot, pieņemsim, ka a mēģina pievienot elementus jau pilnā rindā. Šajā programmas vietā tiks izsaukta BlockingQueue, kas bloķēs konkrēto pavedienu, līdz cits pavediens atbrīvos rindu, lai atbrīvotu vietu. Tas var būt vai nu visas rindas klīrensa elementa (-u) atdalīšana. Līdzīgi tiks izsaukta arī BlockingQueue, lai bloķētu pavedienu, mēģinot noņemt jau tukšu rindu, līdz kāds cits pavediens ievieto vai pievieno elementu tukšajā rinda .

Strādājot ar Java saskarni BlockingQueue, jāatceras, ka tā nepieņem nulles vērtību. Gadījumā, ja jūs mēģināt to izdarīt, tas uzreiz radīs NullPointerException. Zemāk redzamais attēls attēlo Java bloķēšanas rindas interfeisu.



BlockingQueue - BlockingQueue Java - EdurekaŠis interfeiss galvenokārt tiek izmantots starp ražotājiem un patērētājiem, jo ​​tas ir vītņots.Es domāju, ka interfeisu BlockingQueue var izmantot, lai izveidotu rindu, kuru var koplietot gan ražotājs, gan patērētājs

javascript iegūt masīva garumu

Lai darbotos ar Java bloķēšanas rindu, vispirms jums jāiepazīstas ar tā tipiem. Ļaujiet man jūs iepazīstināt ar viņiem šī raksta nākamajā sadaļā.

Konstruktoru veidi Java bloķēšanas rindai

Java blokam BlockingQueue ir divi konstruktoru veidi:



  • Neierobežota rinda: Šāda veida rindai jauda tiks iestatīta uz Integer.MAX_VALUE. Neierobežota rinda nekad netiks bloķēta, jo tā var dinamiski pieaugt, katru reizi, kad tajā tiek ievietots elements. Zemāk ir sintakse, lai izveidotu neierobežotu rindu:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Ierobežota rinda: Šāda veida rindai jums jāizveido rindas ietilpība tās izveidošanas brīdī, ti, kā celtnieks parametrs. Kad izmērs ir piešķirts, to vairs nevar mainīt. Zemāk ir sintakse, lai izveidotu ierobežotu rindu:
BlockingQueue bq = new LinkedBlockingDeque (10)

Tagad, kad esat iepazinies ar BlockingQueue ieviešanas veidiem Java, ļaujiet man uzskaitīt dažas tā metodes.

Metodes BlockingQueue saskarnē

Metode Apraksts
būla pievienošana (E e) Šī metode palīdz ievietot norādīto elementu šajā rindā, ja rindā ir vietas, citādi tā būsiemestIllegalStateException
boolean satur (Object o) Šī metode atgriež vērtību true, ja rindā ir norādītais elements
int drainTo (kolekcija c) Šī metode noņems visus pieejamos elementus no rindas un pievienos tos norādītajai kolekcijai
int drainTo (kolekcija c, int maxElements) Ar šo metodi noteiktā pieejamo elementu skaitā no rindas tiks noņemti un pievienoti norādītajā
Booloean piedāvājums (E e) Šī metode ievietos norādīto elementu rindā, ja tas nav pilns un atgriezīsies patiess, pretējā gadījumā tas atgriezīsies nepatiesi
Būla piedāvājums (E e, ilgs noildze, TimeUnit vienība) Šī metode ievietos norādīto elementu rindā. Gadījumā, ja rinda ir pilna, tā gaidīs norādīto gaidīšanas laiku, līdz vieta būs pieejama.
E aptauja (ilgs noildze, TimeUnit vienība) Šī metode palīdz iegūt un noņemt rindas galvu. Gadījumā, ja rinda ir tukša, tā gaidīs norādīto gaidīšanas laiku, līdz elements būs pieejams
anulēt likt (E e) Šī metode ievietos norādīto elementu rindā, gaidot, kamēr būs pieejama vieta n, ja rinda ir pilna
int atlikusī jauda () Šī metode palīdz atgriezt to papildu elementu skaitu, kurus šī rinda var ideāli pieņemt bez bloķēšanas
būla noņemšana (objekts o) Šī metode noņems no rindas tikai vienu norādītā elementa gadījumu tikai tad, ja tas ir pieejams
E ņemt () Šī metode palīdzēs izgūt un noņemt rindas galvu, gaidot, kad elements būs pieejams, ja rinda ir tukša.

BlockingQueue ieviešana

Šeit es ieviesīšu vienkāršu piemēru BlockingQueue Java kurklases EduProducer ģenerēs datus un ievietos tos a rinda , vienlaikus cita klase, EduConsumer noņems datus no tās pašas rindas.

Šim nolūkam es izveidošu 3 klases, proti:

  1. EduProducers
  2. EduPatērētājs
  3. EdurekaGalvenais

Tagad izveidosim katru no šīm klasēm pa vienam.

iemest dubultā līdz int java

EduProducer.java

pakete edureka importēt java.util.concurrent.BlockingQueue publiskā klase EduProducer īsteno Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). break ()} } private void process () izmet InterruptedException {// Ievietojiet 10 intus rindā (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

pakete edureka importēt java.util.concurrent.BlockingQueue publiskā klase EduConsumer īsteno Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Break ()}} privātais anulēšanas process (Integer take) met InterruptedException {System.out.println ('[[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (rinda BlockingQueue) {this.queue = queue}}

EdurekaMain.java

pakete edureka importēt java.util.concurrent.BlockingQueue importēt java.util.concurrent.LinkedBlockingQueue publiskā klase EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (que) .start () new Thread (jauns EduConsumer (rinda)). start ()}}

Kad esat pabeidzis koda rakstīšanu, izpildiet programmu, lai iegūtu šādu izvadi:

[Producents] Pievienot: 0 [Patērētājs] Paņemt: 0 [Producer] Rindas atlikusī ietilpība: 9 [Producer] Pievienot: 1 [Producer] Rindas atlikusī ietilpība: 9 [Producer] Pievienot: 2 [Producer] Queue atlikusī ietilpība: 8 [Producer ] Pievienot: 3 [Producer] Queue atlikušā ietilpība: 7 [Patērētājs] Take: 1 [Producer] Pievienot: 4 [Producer] Queue atlikusī ietilpība: 7 [Producer] Pievienot: 5 [Producer] Queue atlikusī ietilpība: 6 [Producer] Pievienot : 6 [Ražotājs] Rindas atlikušā ietilpība: 5 [Patērētājs] Paņem: 2 [Ražotājs] Pievieno: 7 [Ražotājs] Rindas atlikusī ietilpība: 5 [Ražotājs] Pievieno: 8 [Ražotājs] Rindas atlikusī jauda: 4 [Ražotājs] Pievieno: 9 [Producenta] rindas atlikusī ietilpība: 3 [patērētājs] ņem: 3 [patērētājs] ņem: 4 [patērētājs] ņem: 5 [patērētājs] ņem: 6 [patērētājs] ņem: 7 [patērētājs] ņem: 8 [patērētājs] ņem: 9

Tas mūs noved pie šī raksta par Java bloķēšanas rindu beigām. Ja vēlaties sīkāk apgūt Java, varat atsaukties uz mūsu arī.

Tagad, kad esat sapratis Java BlockingQueue pamatus, pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums sākumu Java programmēšanā un apmācītu gan pamata, gan uzlabotas Java koncepcijas kopā ar dažādām Java sistēmām, piemēram, hibernācijas un pavasara.

Vai mums ir jautājums? Lūdzu, pieminējiet to šīs “BlockingQueue in Java” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.