Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java BlockingQueue

Java BlockingQueue

In diesem Tutorial lernen wir die Java BlockingQueue-Schnittstelle und ihre Methoden kennen.

Der BlockingQueue Schnittstelle von Java Collections Framework erweitert den Queue Schnittstelle. Dadurch kann jede Operation warten, bis sie erfolgreich ausgeführt werden kann.

Wenn wir beispielsweise ein Element aus einer leeren Warteschlange löschen möchten, ermöglicht die blockierende Warteschlange, dass der Löschvorgang wartet, bis die Warteschlange einige zu löschende Elemente enthält.


Klassen, die BlockingQueue implementieren

Seit BlockingQueue eine Schnittstelle ist, können wir sie nicht direkt implementieren.

Um die Funktionalität des BlockingQueue , müssen wir Klassen verwenden, die es implementieren.


Wie verwende ich blockierende Warteschlangen?

Wir müssen den java.util.concurrent.BlockingQueue importieren Paket, um BlockingQueue zu verwenden .

// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Hier haben wir Objekte animal1 erstellt und tier2 der Klassen ArrayBlockingQueue und LinkedBlockingQueue , beziehungsweise. Diese Objekte können die Funktionalitäten des BlockingQueue nutzen Schnittstelle.


Methoden der BlockingQueue

Basierend darauf, ob eine Warteschlange voll oder leer ist, können Methoden einer blockierenden Warteschlange in 3 Kategorien eingeteilt werden:

Methoden, die eine Ausnahme auslösen


Methoden, die einen gewissen Wert zurückgeben

Mehr zu Angebot() und Umfrage()

Die offer() und poll() Methode kann mit Timeouts verwendet werden. Das heißt, wir können Zeiteinheiten als Parameter übergeben. Zum Beispiel

offer(value, 100, milliseconds)

Hier,

Das bedeutet offer() -Methode versucht, ein Element in die Sperrwarteschlange für 100 einzufügen Millisekunden. Wenn das Element nicht in 100 Millisekunden eingefügt werden kann, gibt die Methode false zurück .

Hinweis: Statt milliseconds , können wir auch diese Zeiteinheiten verwenden:days , hours , minutes , seconds , microseconds und nanoseconds in offer() und poll() Methoden.


Methoden, die den Vorgang blockieren

Die BlockingQueue stellt auch Methoden bereit, um die Operationen zu blockieren und zu warten, ob die Warteschlange voll oder leer ist.

Angenommen, wir möchten Elemente in eine Warteschlange einfügen. Wenn die Warteschlange voll ist, dann die put() -Methode wartet, bis die Warteschlange Platz zum Einfügen von Elementen hat.

Ebenso, wenn wir Elemente aus einer Warteschlange löschen möchten. Wenn die Warteschlange leer ist, dann der take() -Methode wartet, bis die Warteschlange zu löschende Elemente enthält.


Implementierung von 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<Integer> 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();
      }
    }
}

Ausgabe

BlockingQueue: [2, 1, 3]
Removed Element: 2

Um mehr über ArrayBlockingQueue zu erfahren , besuchen Sie Java ArrayBlockingQueue.


Warum BlockingQueue?

In Java BlockingQueue gilt als threadsicher Sammlung. Dies liegt daran, dass es bei Multi-Threading-Operationen hilfreich sein kann.

Angenommen, ein Thread fügt Elemente in die Warteschlange ein und ein anderer Thread entfernt Elemente aus der Warteschlange.

Wenn nun der erste Thread langsamer läuft, kann die blockierende Warteschlange den zweiten Thread warten lassen, bis der erste Thread seine Operation abgeschlossen hat.


Java

  1. Java-Operatoren
  2. Java-Kommentare
  3. Java for-each-Schleife
  4. Java-Strings
  5. Java-Schnittstelle
  6. Anonyme Java-Klasse
  7. Java-Versuch-mit-Ressourcen
  8. Java-Anmerkungen
  9. Java-Assertionen
  10. Java-Vektor