Tässä opetusohjelmassa opitaan Java BlockingQueue -käyttöliittymästä ja sen menetelmistä.
BlockingQueue
Rajapinta Java Collections
puitteet laajentaa Queue
kä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 BlockingQueue
se 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.BlockingQueue
paketti 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 ArrayBlockingQueue
ja LinkedBlockingQueue
vastaavasti. Nämä objektit voivat käyttää BlockingQueue
kä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,false
jos jono on täynnä.peek()
- Palauttaa estojonon pään. Palauttaa,null
jos jono on tyhjä.poll()
- Poistaa elementin estojonosta. Palauttaa,null
jos 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 100
millisekunteja. 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
, microseconds
ja nanoseconds
vuonna offer()
ja poll()
menetelmiin.
Menetelmät, jotka estävät toiminnan
Siinä on BlockingQueue
myö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 ArrayBlockingQueue
Java ArrayBlockingQueue -sivulla.
Miksi BlockingQueue?
Java: ssa BlockingQueue
sitä 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.