Java BlockingQueue liides

Selles õpetuses õpime Java BlockingQueue liidest ja selle meetodeid.

BlockingQueueLiides Java Collectionsraamistik laiendab Queueliides. See võimaldab igal operatsioonil oodata, kuni selle saab edukalt sooritada.

Näiteks kui soovime elemendi tühjast järjekorrast kustutada, siis blokeerimisjärjekord lubab kustutamisoperatsioonil oodata, kuni järjekorras on mõned kustutatavad elemendid.

Klassid, mis rakendavad BlockingQueue'i

Kuna BlockingQueuesee on liides, ei saa me seda otseselt rakendada.

Selle funktsionaalsuse BlockingQueuekasutamiseks peame kasutama klasse, mis seda rakendavad.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Kuidas kasutada blokeerimisjärjekordi?

java.util.concurrent.BlockingQueueKasutamiseks peame pakendi importima BlockingQueue.

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

Siin oleme loonud klasside ArrayBlockingQueueja LinkedBlockingQueuevastavalt objektid animal1 ja animal2 . Need objektid saavad kasutada BlockingQueueliidese funktsionaalsusi .

Blokeerimisjärjekorra meetodid

Selle põhjal, kas järjekord on täis või tühi, saab blokeeriva järjekorra meetodid jagada kolme kategooriasse:

Meetodid, mis põhjustavad erandi

  • add()- Lisab blokeerimisjärjekorda elemendi järjekorra lõpus. Kui järjekord on täis, viskab erandi.
  • element()- tagastab blokeerimisjärjekorra pea. Kui järjekord on tühi, viskab erandi.
  • remove()- Eemaldab blokeerimisjärjekorrast elemendi. Kui järjekord on tühi, viskab erandi.

Meetodid, mis tagastavad mingi väärtuse

  • offer()- Lisab määratud elemendi järjekorra lõpus olevasse blokeerimisjärjekorda. Tagastab, falsekui järjekord on täis.
  • peek()- tagastab blokeerimisjärjekorra pea. Tagastab, nullkui järjekord on tühi.
  • poll()- Eemaldab blokeerimisjärjekorrast elemendi. Tagastab, nullkui järjekord on tühi.

Rohkem pakkumisest () ja küsitlusest ()

offer()Ja poll()meetodit saab kasutada koos ajalõppude. See tähendab, et saame parameetrina edastada ajaühikud. Näiteks,

 offer(value, 100, milliseconds) 

Siin,

  • väärtus on järjekorda lisatav element
  • Ja oleme seadnud ajalõpu 100 millisekundit

See tähendab, et offer()meetod püüab 100millisekundite jooksul blokeerimisjärjekorda lisada elemendi . Kui elementi ei saa sisestada 100 millisekundi jooksul, naaseb meetod false.

Märkus: Selle asemel, et millisecondssaame kasutada ka need ajaühikute: days, hours, minutes, seconds, microsecondsja nanosecondson offer()ja poll()meetodeid.

Operatsiooni blokeerivad meetodid

BlockingQueueKa meetodid blokeerida operatsioonide ja oodata, kui järjekord on täis või tühi.

  • put()- Lisab blokeerimisjärjekorda elemendi. Kui järjekord on täis, ootab see, kuni järjekorras on ruumi elemendi sisestamiseks.
  • take()- Eemaldab ja tagastab blokeerimisjärjekorrast elemendi. Kui järjekord on tühi, ootab see, kuni järjekorras on kustutatavaid elemente.

Oletame, et me tahame lisada elemendid järjekorda. Kui järjekord on täis, put()ootab meetod, kuni järjekorras on ruumi elementide sisestamiseks.

Samamoodi, kui tahame elemendid järjekorrast kustutada. Kui järjekord on tühi, take()ootab meetod, kuni järjekord sisaldab kustutatavaid elemente.

BlockingQueue'i rakendamine ArrayBlockingQueue'is

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

Väljund

 BlockingQueue: (2, 1, 3) Eemaldatud element: 2 

Lisateabe saamiseks ArrayBlockingQueuekülastage Java ArrayBlockingQueue.

Miks blokeerida järjekord?

Javas BlockingQueuepeetakse seda niiditurvaliseks kollektsiooniks. Selle põhjuseks on see, et sellest võib abi olla mitme lõime toimingul.

Oletame, et üks lõime sisestab järjekorda elemente ja teine ​​lõime eemaldab elemendid järjekorrast.

Kui esimene lõime töötab aeglasemalt, võib blokeerimisjärjekord panna teise lõime ootama, kuni esimene lõime oma töö lõpetab.

Huvitavad Artiklid...