Java BlockingQueue interfész

Ebben az oktatóanyagban megismerhetjük a Java BlockingQueue felületet és annak módszereit.

A BlockingQueueJava Collectionskeretrendszer Queueinterfésze kiterjeszti az interfészt. Lehetővé teszi bármely művelet kivárását, amíg sikeresen elvégezhető.

Például, ha törölni akarunk egy elemet egy üres sorból, akkor a blokkoló várakozási sor lehetővé teszi a törlési művelet megvárását, amíg a sor tartalmaz néhány törölendő elemet.

Osztályok, amelyek megvalósítják a BlockingQueue-t

Mivel BlockingQueueez egy interfész, nem tudjuk biztosítani annak közvetlen megvalósítását.

A funkcionalitás BlockingQueuehasználatához olyan osztályokat kell használnunk, amelyek megvalósítják azt.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Hogyan kell használni a blokkoló várólistákat?

A java.util.concurrent.BlockingQueuehasználat érdekében be kell importálnunk a csomagot BlockingQueue.

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

Itt hoztunk létre objektumokat animal1 és animal2 osztályok ArrayBlockingQueueés LinkedBlockingQueuerendre. Ezek az objektumok felhasználhatják az BlockingQueueinterfész funkcióit .

A BlockingQueue módszerei

Annak alapján, hogy egy sor teljes vagy üres, a blokkoló várakozási módszerek 3 kategóriába sorolhatók:

Kivételt elvető módszerek

  • add()- Beszúr egy elemet a blokkoló sorba a sor végén. Kivételt dob, ha a sor tele van.
  • element()- Visszaadja a blokkoló sor fejét. Kivételt dob, ha a sor üres.
  • remove()- Eltávolít egy elemet a blokkoló sorból. Kivételt dob, ha a sor üres.

Olyan módszerek, amelyek valamilyen értéket adnak vissza

  • offer()- Beszúrja a megadott elemet a sor végén lévő blokkoló sorba. Visszatér, falseha a sor tele van.
  • peek()- Visszaadja a blokkoló sor fejét. Visszatér, nullha a sor üres.
  • poll()- Eltávolít egy elemet a blokkoló sorból. Visszatér, nullha a sor üres.

További ajánlat () és közvélemény-kutatás ()

A offer()és a poll()módszer használható időkorlátokkal. Vagyis paraméterként átadhatjuk az időegységeket. Például,

 offer(value, 100, milliseconds) 

Itt,

  • Az érték a sorba beillesztendő elem
  • És beállítottunk egy 100 milliszekundumos időtúllépést

Ez azt jelenti, hogy a offer()módszer megpróbál betenni egy elemet a blokkoló sorba 100milliszekundumig. Ha az elemet nem lehet 100 milliszekundum alatt beilleszteni, a módszer visszatér false.

Megjegyzés: Ahelyett, hogy millisecondsazt is használja ezeket ideje alatt: days, hours, minutes, seconds, microsecondsés nanosecondsa offer()és poll()módszereket.

A műveletet blokkoló módszerek

Az BlockingQueueeljárásokat is biztosít, hogy blokkolja a műveleteket, és várja, ha a sor megtelt, vagy üres.

  • put()- Beszúr egy elemet a blokkoló sorba. Ha a sor tele van, akkor megvárja, amíg a sornak van helye egy elem beszúrására.
  • take()- Eltávolít és visszaad egy elemet a blokkoló sorból. Ha a sor üres, akkor megvárja, amíg a sorban törölni kell az elemeket.

Tegyük fel, hogy elemeket szeretnénk beszúrni egy sorba. Ha a várólista megtelt, akkor a put()módszer megvárja, amíg a sornak van helye az elemek beszúrására.

Hasonlóképpen, ha elemeket akarunk törölni a sorból. Ha a sor üres, akkor a take()módszer megvárja, amíg a sor törlendő elemeket tartalmaz.

A BlockingQueue megvalósítása az ArrayBlockingQueue-ban

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

Kimenet

 BlockingQueue: (2, 1, 3) Eltávolított elem: 2 

További információért ArrayBlockingQueuelátogasson el a Java ArrayBlockingQueue oldalra.

Miért éppen a BlockingQueue?

A Java -ban szálbiztos gyűjteménynek BlockingQueueszámít . Ugyanis hasznos lehet a többszálas műveleteknél.

Tegyük fel, hogy az egyik szál elemeket illeszt be a sorba, egy másik szál pedig eltávolítja az elemeket a sorból.

Ha az első szál lassabban fut, akkor a blokkolási sor a második szálat megvárhatja, amíg az első szál befejezi a működését.

érdekes cikkek...