Was ist BlockingQueue in Java und wie wird es implementiert?



Dieser Artikel zu BlockingQueue in Java hilft Ihnen dabei, mehr über die BlockingQueue-Oberfläche zu erfahren. Es gibt Ihnen auch Einblicke in seine Methoden und praktische Umsetzung

ist bei Programmierern aufgrund seines umfassenden Angebots an integrierten Funktionen äußerst beliebt. In den meisten Fällen haben Sie eine dedizierte Lösung für Ihr Problem, noch bevor es auftritt. Solch ein äußerst nützlicher und wichtiger Teil von ist die BlockingQueue-Schnittstelle in Java. In diesem Artikel werde ich BlockingQueue in Java und die Methoden zu seiner Implementierung näher erläutern.

Nachfolgend sind die in diesem Artikel behandelten Themen aufgeführt:





BlockingQueue-Schnittstelle in Java

BlockingQueue in Java ist eine Schnittstelle, die in Java 1.5 zusammen mit einigen anderen gleichzeitigen Utility-Klassen wie ConcurrentHashMap, CopyOnWriteArrrayList usw. hinzugefügt wurde. Die BlockingQueue-Schnittstelle gehört zur java.util.concurrent Paket .Diese Schnittstelle verbessert die Flusskontrolle durch Aktivieren der Blockierung, falls ein Thread versucht, eine leere Warteschlange aus der Warteschlange zu entfernen oder eine vollständige Warteschlange in die Warteschlange zu stellen. In beiden Fällen ist diese Schnittstelle praktisch.In einfacheren Worten, nehmen wir an, a versucht, Elemente zu einer bereits vollen Warteschlange hinzuzufügen. An diesem Punkt im Programm wird BlockingQueue aufgerufen, wodurch dieser bestimmte Thread blockiert wird, bis ein anderer Thread die Warteschlange freigibt, um Platz zu schaffen. Dies kann darauf zurückzuführen sein, dass entweder ein oder mehrere Elemente der Freigabe der gesamten Warteschlange aus der Warteschlange entfernt wurden. In ähnlicher Weise wird BlockingQueue aufgerufen, um einen Thread zu blockieren, der versucht, eine bereits leere Warteschlange aus der Warteschlange zu entfernen, bis ein anderer Thread ein Element einfügt oder ein Element in die leere einfügt Warteschlange .

Wenn Sie mit der BlockingQueue-Schnittstelle in Java arbeiten, müssen Sie berücksichtigen, dass sie keinen Nullwert akzeptiert. Wenn Sie dies versuchen, wird sofort eine NullPointerException ausgelöst. Die folgende Abbildung zeigt die Funktionsweise der BlockingQueue-Schnittstelle in Java.



BlockingQueue - BlockingQueue in Java - EdurekaDies Schnittstelle wird hauptsächlich zwischen Produzenten und Verbrauchern verwendet, da es threadsicher ist.Ich meine, die BlockingQueue-Schnittstelle kann verwendet werden, um eine Warteschlange zu erstellen, die sowohl vom Produzenten als auch vom Konsumenten gemeinsam genutzt werden kann

Um mit BlockingQueue in Java arbeiten zu können, müssen Sie sich zunächst mit den Typen vertraut machen. Lassen Sie mich sie im nächsten Abschnitt dieses Artikels vorstellen.

Sitzungsverwaltung in der Java-Webanwendung

Konstruktortypen für BlockingQueue in Java

Es gibt zwei Arten von Konstruktoren für die BlockingQueue-Schnittstelle in Java:



  • Ungebundene Warteschlange: Für diesen Warteschlangentyp wird die Kapazität auf Integer.MAX_VALUE festgelegt. Eine unbegrenzte Warteschlange wird niemals blockiert, da sie jedes Mal, wenn ein Element in sie eingefügt wird, dynamisch wachsen kann. Unten finden Sie die Syntax zum Erstellen einer unbegrenzten Warteschlange:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Begrenzte Warteschlange: Für diese Art von Warteschlange müssen Sie die Kapazität der Warteschlange zum Zeitpunkt ihrer Erstellung übergeben, d. H. Baumeister Parameter. Sobald die Größe zugewiesen wurde, kann sie nicht mehr geändert werden. Unten finden Sie die Syntax zum Erstellen einer begrenzten Warteschlange:
BlockingQueue bq = new LinkedBlockingDeque (10)

Nachdem Sie mit den Möglichkeiten zur Implementierung von BlockingQueue in Java vertraut sind, möchte ich einige seiner Methoden auflisten.

Methoden in der BlockingQueue-Schnittstelle

Methode Beschreibung
Boolesches Addieren (E e) Diese Methode hilft beim Einfügen des angegebenen Elements in diese Warteschlange, wenn in der Warteschlange noch Platz vorhanden istwerfen einIllegale staatliche Ausnahme
Boolescher Wert enthält (Objekt o) Diese Methode gibt true zurück, wenn die Warteschlange das angegebene Element enthält
int drainTo (Sammlung c) Diese Methode entfernt alle verfügbaren Elemente aus der Warteschlange und fügt sie der angegebenen Sammlung hinzu
int drainTo (Sammlung c, int maxElements) Diese Methode entfernt die angegebene Anzahl verfügbarer Elemente aus der Warteschlange und fügt sie der angegebenen hinzu
Booloean Angebot (E e) Diese Methode fügt das angegebene Element in die Warteschlange ein, wenn es nicht voll ist, und gibt true zurück, andernfalls wird false zurückgegeben
Boolesches Angebot (E e, lange Zeitüberschreitung, TimeUnit-Einheit) Diese Methode fügt das angegebene Element in die Warteschlange ein. Wenn die Warteschlange voll ist, wartet sie bis zur angegebenen Wartezeit, bis der Speicherplatz verfügbar ist.
E-Umfrage (lange Zeitüberschreitung, TimeUnit-Einheit) Diese Methode hilft beim Abrufen und Entfernen des Kopfes der Warteschlange. Wenn die Warteschlange leer ist, wartet sie bis zur angegebenen Wartezeit, bis ein Element verfügbar ist
void put (E e) Diese Methode fügt das angegebene Element in die Warteschlange ein, indem sie darauf wartet, dass Speicherplatz verfügbar wird, falls die Warteschlange voll ist
int verbleibende Kapazität () Diese Methode hilft bei der Rückgabe der Anzahl zusätzlicher Elemente, die diese Warteschlange idealerweise akzeptieren kann, ohne blockiert zu werden
boolean remove (Objekt o) Diese Methode entfernt eine einzelne Instanz des angegebenen Elements nur dann aus der Warteschlange, wenn es vorhanden ist
E take () Diese Methode hilft beim Abrufen und Entfernen des Kopfes der Warteschlange, indem darauf gewartet wird, dass ein Element verfügbar wird, falls die Warteschlange leer ist.

BlockingQueue-Implementierungen

Hier werde ich ein einfaches Beispiel für BlockingQueue in Java implementieren, woKlasse EduProducer generiert die Daten und fügt sie in eine ein Warteschlange Gleichzeitig entfernt eine andere Klasse, EduConsumer, die Daten aus derselben Warteschlange.

Verwendung der Scannerklasse

Dafür werde ich 3 Klassen erstellen, nämlich:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Lassen Sie uns nun jede dieser Klassen einzeln erstellen.

EduProducer.java

Paket edureka import java.util.concurrent.BlockingQueue öffentliche Klasse EduProducer implementiert Runnable {private final BlockingQueue-Warteschlange @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () löst InterruptedException aus {// Setze 10 Ints in die Warteschlange für (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

Paket edureka import java.util.concurrent.BlockingQueue öffentliche Klasse EduConsumer implementiert Runnable {private final BlockingQueue-Warteschlange @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} privater ungültiger Prozess (Integer take) löst InterruptedException aus {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (BlockingQueue-Warteschlange) {this.queue = queue}}

EdurekaMain.java

Paket edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue öffentliche Klasse EdurekaMain {öffentliche statische Leere main (String [] args) {BlockingQueue queue = neuer LinkedBlockingQueue (10) neuer Thread (neuer EduProducer (Warteschlange)) .start () neuer Thread (neuer EduConsumer (Warteschlange)). start ()}}

Wenn Sie mit dem Schreiben des Codes fertig sind, führen Sie das Programm aus, um die folgende Ausgabe zu erhalten:

konvertiere Binär in Integer Java
[Produzent] Hinzufügen: 0 [Verbraucher] Nehmen: 0 [Produzent] Restkapazität der Warteschlange: 9 [Produzent] Hinzufügen: 1 [Produzent] Restkapazität der Warteschlange: 9 [Produzent] Hinzufügen: 2 [Produzent] Restkapazität der Warteschlange: 8 [Produzent ] Hinzufügen: 3 [Produzent] Restkapazität der Warteschlange: 7 [Verbraucher] Take: 1 [Produzent] Hinzufügen: 4 [Produzent] Restkapazität der Warteschlange: 7 [Produzent] Hinzufügen: 5 [Produzent] Restkapazität der Warteschlange: 6 [Produzent] Hinzufügen : 6 [Produzent] Restkapazität der Warteschlange: 5 [Verbraucher] Einnahme: 2 [Produzent] Hinzufügen: 7 [Produzent] Restkapazität der Warteschlange: 5 [Produzent] Hinzufügen: 8 [Produzent] Restkapazität der Warteschlange: 4 [Produzent] Hinzufügen: 9 [Produzent] Warteschlange verbleibende Kapazität: 3 [Verbraucher] Nehmen: 3 [Verbraucher] Nehmen: 4 [Verbraucher] Nehmen: 5 [Verbraucher] Nehmen: 6 [Verbraucher] Nehmen: 7 [Verbraucher] Nehmen: 8 [Verbraucher] Nehmen: 9

Dies bringt uns zum Ende dieses Artikels über BlockingQueue in Java. Wenn Sie Java genauer lernen möchten, können Sie sich auf unsere beziehen auch.

Nachdem Sie die Grundlagen von BlockingQueue in Java verstanden haben, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieser 'BlockingQueue in Java' und wir werden uns so schnell wie möglich bei Ihnen melden.