Java BlockingQueue-interface

In deze tutorial leren we over de Java BlockingQueue-interface en zijn methoden.

De BlockingQueueinterface van het Java- Collectionsframework breidt de Queueinterface uit. Elke bewerking kan wachten totdat deze met succes kan worden uitgevoerd.

Als we bijvoorbeeld een element uit een lege wachtrij willen verwijderen, staat de blokkeerwachtrij de verwijderbewerking toe om te wachten tot de wachtrij enkele elementen bevat die moeten worden verwijderd.

Klassen die BlockingQueue implementeren

Aangezien het BlockingQueueeen interface is, kunnen we de directe implementatie ervan niet verzorgen.

Om de functionaliteit van de te gebruiken BlockingQueue, moeten we klassen gebruiken die het implementeren.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Hoe blokkeer wachtrijen te gebruiken?

We moeten het java.util.concurrent.BlockingQueuepakket importeren om te kunnen gebruiken BlockingQueue.

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

Hier hebben we gemaakte objecten animal1 en animal2 van de klassen ArrayBlockingQueueen LinkedBlockingQueue, respectievelijk. Deze objecten kunnen de functionaliteiten van de BlockingQueueinterface gebruiken.

Methoden voor BlockingQueue

Afhankelijk van of een wachtrij vol of leeg is, kunnen de methoden van een blokkerende wachtrij worden onderverdeeld in 3 categorieën:

Methoden die een uitzondering genereren

  • add()- Voegt een element toe aan de blokkeerwachtrij aan het einde van de wachtrij. Gooit een uitzondering als de wachtrij vol is.
  • element()- Geeft het hoofd van de blokkeerwachtrij terug. Genereert een uitzondering als de wachtrij leeg is.
  • remove()- Verwijdert een element uit de blokkeerwachtrij. Genereert een uitzondering als de wachtrij leeg is.

Methoden die enige waarde teruggeven

  • offer()- Voegt het opgegeven element toe aan de blokkeerwachtrij aan het einde van de wachtrij. Retourneert falseals de wachtrij vol is.
  • peek()- Geeft het hoofd van de blokkeerwachtrij terug. Retourneert nullals de wachtrij leeg is.
  • poll()- Verwijdert een element uit de blokkeerwachtrij. Retourneert nullals de wachtrij leeg is.

Meer aanbod () en poll ()

De offer()en poll()methode kan worden gebruikt met time-outs. Dat wil zeggen, we kunnen tijdseenheden als parameter doorgeven. Bijvoorbeeld,

 offer(value, 100, milliseconds) 

Hier,

  • waarde is het element dat in de wachtrij moet worden ingevoegd
  • En we hebben een time-out van 100 milliseconden ingesteld

Dit betekent dat de offer()methode zal proberen om een ​​element gedurende 100milliseconden in de blokkeerwachtrij in te voegen . Als het element niet binnen 100 milliseconden kan worden ingevoegd, retourneert de methode false.

Opmerking: In plaats van milliseconds, we hebben ook de volgende tijdseenheden kunt gebruiken: days, hours, minutes, seconds, microsecondsen nanosecondsin offer()en poll()methoden.

Methoden die de bewerking blokkeren

Het BlockingQueuebiedt ook methoden om de bewerkingen te blokkeren en te wachten als de wachtrij vol of leeg is.

  • put()- Voegt een element toe aan de blokkeerwachtrij. Als de wachtrij vol is, wacht deze totdat de wachtrij ruimte heeft om een ​​element in te voegen.
  • take()- Verwijdert en retourneert een element uit de blokkeerwachtrij. Als de wachtrij leeg is, wacht deze tot de wachtrij elementen bevat die moeten worden verwijderd.

Stel dat we elementen in een wachtrij willen invoegen. Als de wachtrij vol is put(), wacht de methode totdat de wachtrij ruimte heeft om elementen in te voegen.

Evenzo als we elementen uit een wachtrij willen verwijderen. Als de wachtrij leeg is take(), wacht de methode tot de wachtrij elementen bevat die moeten worden verwijderd.

Implementatie van BlockingQueue in ArrayBlockingQueue

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

Uitvoer

 BlockingQueue: (2, 1, 3) Element verwijderd: 2 

Voor meer informatie over ArrayBlockingQueue, bezoek Java ArrayBlockingQueue.

Waarom BlockingQueue?

In Java BlockingQueuewordt het beschouwd als de threadveilige verzameling. Het is omdat het handig kan zijn bij bewerkingen met meerdere threads.

Stel dat een thread elementen in de wachtrij invoegt en een andere thread elementen uit de wachtrij verwijdert.

Als de eerste thread nu langzamer loopt, kan de blokkeringswachtrij de tweede thread laten wachten totdat de eerste thread zijn werking heeft voltooid.

Interessante artikelen...