„Java BlockingQueue“ sąsaja

Šioje pamokoje sužinosime apie „Java BlockingQueue“ sąsają ir jos metodus.

BlockingQueueJava“ Collectionssistemos Queuesąsaja išplečia sąsają. Tai leidžia bet kokiai operacijai palaukti, kol ją bus galima sėkmingai atlikti.

Pavyzdžiui, jei norime ištrinti elementą iš tuščios eilės, tada blokavimo eilė leidžia ištrynimo operacijai palaukti, kol eilėje bus keletas elementų, kuriuos reikia ištrinti.

Klasės, įgyvendinančios „BlockingQueue“

Kadangi BlockingQueuetai yra sąsaja, negalime tiesiogiai jos įgyvendinti.

Norėdami naudoti „“ funkcionalumą BlockingQueue, turime naudoti klases, kurios jį įgyvendina.

  • „ArrayBlockingQueue“
  • „LinkedBlockingQueue“

Kaip naudotis blokavimo eilėmis?

Norėdami naudoti, turime importuoti java.util.concurrent.BlockingQueuepaketą BlockingQueue.

 // Array implementation of BlockingQueue BlockingQueue animal1 = new ArraryBlockingQueue(); // LinkedList implementation of BlockingQueue BlockingQueue animal2 = new LinkedBlockingQueue(); 

Čia, mes sukūrėme objektai animal1 ir animal2 klasių ArrayBlockingQueueir LinkedBlockingQueue, atitinkamai. Šie objektai gali naudoti BlockingQueuesąsajos funkcijas .

Blokavimo eilės metodai

Pagal tai, ar eilė pilna, ar tuščia, blokavimo eilės metodus galima suskirstyti į 3 kategorijas:

Metodai, kurie lemia išimtį

  • add()- Įterpia elementą į blokuojančią eilę eilės pabaigoje. Išmeta išimtį, jei eilė pilna.
  • element()- grąžina blokavimo eilės galvą. Išmeta išimtį, jei eilė tuščia.
  • remove()- Pašalina elementą iš blokavimo eilės. Išmeta išimtį, jei eilė tuščia.

Metodai, kurie grąžina tam tikrą vertę

  • offer()- Įterpia nurodytą elementą į blokavimo eilę eilės pabaigoje. Grąžina, falsejei eilė pilna.
  • peek()- grąžina blokavimo eilės galvą. Grąžina, nulljei eilė tuščia.
  • poll()- Pašalina elementą iš blokavimo eilės. Grąžina, nulljei eilė tuščia.

Daugiau apie pasiūlymą () ir apklausą ()

offer()Ir poll()metodas gali būti naudojamas su praėjęs laikas. Tai yra, mes galime perduoti laiko vienetus kaip parametrą. Pavyzdžiui,

 offer(value, 100, milliseconds) 

Čia

  • reikšmė yra elementas, kuris bus įterptas į eilę
  • Mes nustatėme 100 milisekundžių skirtąjį laiką

Tai reiškia, kad offer()metodas bandys įterpti elementą į blokavimo eilę 100milisekundėmis. Jei elemento neįmanoma įterpti per 100 milisekundžių, metodas grąžinamas false.

Pastaba: Vietoj milliseconds, mes taip pat gali naudoti šiuos laiko vienetus: days, hours, minutes, seconds, microsecondsir nanosecondsį offer()ir poll()metodai.

Operaciją blokuojantys metodai

Taip BlockingQueuepat pateikiami metodai, kaip blokuoti operacijas ir laukti, jei eilė pilna ar tuščia.

  • put()- Įterpia elementą į blokavimo eilę. Jei eilė pilna, ji lauks, kol eilėje bus vietos elementui įterpti.
  • take()- Pašalina ir grąžina elementą iš blokavimo eilės. Jei eilė tuščia, ji lauks, kol eilėje bus ištrinti elementai.

Tarkime, mes norime į eilę įterpti elementų. Jei eilė pilna, put()metodas palauks, kol eilėje bus vietos elementams įterpti.

Panašiai, jei norime iš eilės ištrinti elementus. Jei eilė tuščia, take()metodas palauks, kol eilėje bus elementai, kuriuos reikia ištrinti.

„BlockingQueue“ įdiegimas „ArrayBlockingQueue“

 import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( // Create a blocking queue using the ArrayBlockingQueue BlockingQueue numbers = new ArrayBlockingQueue(5); try ( // Insert element to blocking queue numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BLockingQueue: " + numbers); // Remove Elements from blocking queue int removedNumber = numbers.take(); System.out.println("Removed Number: " + removedNumber); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Rezultatas

 „BlockingQueue“: (2, 1, 3) Pašalintas elementas: 2 

Norėdami sužinoti daugiau apie tai ArrayBlockingQueue, apsilankykite „Java ArrayBlockingQueue“.

Kodėl verta blokuoti eilę?

„Java“ kalba BlockingQueueyra laikoma saugia kolekcija. Taip yra todėl, kad tai gali būti naudinga atliekant kelių gijų operacijas.

Tarkime, viena gija įterpia elementus į eilę, o kita gija pašalina elementus iš eilės.

Dabar, jei pirmasis siūlas veikia lėčiau, blokavimo eilė gali priversti antrąją giją laukti, kol pirmoji gija užbaigs savo operaciją.

Įdomios straipsniai...