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.








