Java BlockingQueue -rajapinta

Tässä opetusohjelmassa opitaan Java BlockingQueue -käyttöliittymästä ja sen menetelmistä.

BlockingQueueRajapinta Java Collectionspuitteet laajentaa Queuekäyttöliittymän. Sen avulla kaikki toiminnot voivat odottaa, kunnes se voidaan suorittaa onnistuneesti.

Esimerkiksi, jos haluamme poistaa elementin tyhjästä jonosta, estojono sallii poistotoiminnon odottaa, kunnes jonossa on joitain poistettavia elementtejä.

Luokat, jotka toteuttavat BlockingQueuen

Koska BlockingQueuese on käyttöliittymä, emme voi tarjota sen suoraa toteutusta.

Jotta voisimme käyttää tämän toiminnallisuutta BlockingQueue, meidän on käytettävä luokkia, jotka toteuttavat sen.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Kuinka estää jonoja?

Meidän on tuotava java.util.concurrent.BlockingQueuepaketti käyttöä varten BlockingQueue.

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

Tässä olemme luoneet esineitä eläin1 ja eläin2 luokista ArrayBlockingQueueja LinkedBlockingQueuevastaavasti. Nämä objektit voivat käyttää BlockingQueuekäyttöliittymän toimintoja .

Menetelmät BlockingQueue-toiminnolle

Sen perusteella, onko jono täynnä vai tyhjä, estojonon menetelmät voidaan jakaa kolmeen luokkaan:

Menetelmät, jotka aiheuttavat poikkeuksen

  • add()- Lisää elementin estojonoon jonon lopussa. Heittää poikkeuksen, jos jono on täynnä.
  • element()- Palauttaa estojonon pään. Heittää poikkeuksen, jos jono on tyhjä.
  • remove()- Poistaa elementin estojonosta. Heittää poikkeuksen, jos jono on tyhjä.

Menetelmät, jotka palauttavat jonkin verran arvoa

  • offer()- Lisää määritetty elementti estojonoon jonon lopussa. Palauttaa, falsejos jono on täynnä.
  • peek()- Palauttaa estojonon pään. Palauttaa, nulljos jono on tyhjä.
  • poll()- Poistaa elementin estojonosta. Palauttaa, nulljos jono on tyhjä.

Lisää tarjouksesta () ja kyselystä ()

offer()Ja poll()menetelmää voidaan käyttää aikakatkaisuja. Eli voimme välittää aikayksiköt parametrina. Esimerkiksi,

 offer(value, 100, milliseconds) 

Tässä,

  • arvo on jonoon lisättävä elementti
  • Ja olemme asettaneet 100 millisekunnin aikakatkaisun

Tämä tarkoittaa, että offer()menetelmä yrittää lisätä elementin estojonoon 100millisekunteja. Jos elementtiä ei voida lisätä 100 millisekuntiin, menetelmä palaa false.

Huom: sijasta milliseconds, voimme myös käyttää näitä aikayksikön: days, hours, minutes, seconds, microsecondsja nanosecondsvuonna offer()ja poll()menetelmiin.

Menetelmät, jotka estävät toiminnan

Siinä on BlockingQueuemyös tapoja estää toiminnot ja odottaa, jos jono on täynnä tai tyhjä.

  • put()- Lisää elementin estojonoon. Jos jono on täynnä, se odottaa, kunnes jonossa on tilaa lisätä elementti.
  • take()- Poistaa ja palauttaa elementin estojonosta. Jos jono on tyhjä, se odottaa, kunnes jonossa on poistettavia elementtejä.

Oletetaan, että haluamme lisätä elementtejä jonoon. Jos jono on täynnä, put()menetelmä odottaa, kunnes jonossa on tilaa lisätä elementtejä.

Vastaavasti, jos haluamme poistaa elementtejä jonosta. Jos jono on tyhjä, take()menetelmä odottaa, kunnes jono sisältää poistettavia elementtejä.

BlockingQueuen toteutus ArrayBlockingQueue-sovelluksessa

 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(); ) ) ) 

Tuotos

 BlockingQueue: (2, 1, 3) Poistettu elementti: 2 

Lisätietoja on ArrayBlockingQueueJava ArrayBlockingQueue -sivulla.

Miksi BlockingQueue?

Java: ssa BlockingQueuesitä pidetään langattomaksi kokoelmaksi. Se johtuu siitä, että siitä voi olla apua monisäikeisessä toiminnossa.

Oletetaan, että yksi säie lisää elementtejä jonoon ja toinen säie poistaa elementtejä jonosta.

Jos ensimmäinen säie kulkee hitaammin, estojono voi saada toisen säikeen odottamaan, kunnes ensimmäinen säie suorittaa toimintansa.

Mielenkiintoisia artikkeleita...