In diesem Artikel werden hauptsächlich detaillierte Erklärungen und Beispiele zum Blockieren von QueueBlockingQueue in Java vorgestellt Java.
BlockingQueue ist eine gute Lösung für die Übertragung von Daten in Multithreads. Dies ist eine Schnittstelle
Eine ganz besondere Warteschlange. Wenn die BlockQueue leer ist, wird der Vorgang zum Abrufen von Dingen aus der BlockingQueue blockiert und in den Wartestatusversetzt. Sie wird erst aktiviert, wenn die BlockingQueue etwas eintritt BlockingQueue ist voll, jeder Versuch, es zu speichern, wird ebenfalls blockiert und wechselt in den Wartezustand. Es wird nicht aktiviert, um den Vorgang fortzusetzen, bis in der BlockingQueue Platz ist. Vier Implementierungsklassen von BlockingQueue:
1.ArrayBlockingQueue: BlockingQueue der angegebenen Größe, sein
Konstruktor Ein int Der Parameter muss verwendet werden, um seine Größe anzugeben. Die darin enthaltenen Objekte werden in der FIFO-Reihenfolge (First In, First Out) sortiert 2. Wenn sein Konstruktor einen Parameter mit einer bestimmten Größe annimmt, hat die generierte BlockingQueue eine Größenbeschränkung. Wenn er keinen Größenparameter annimmt, wird die Größe der generierten BlockingQueue durch Integer.MAX_VALUE bestimmt. Die darin enthaltenen Objekte basieren auf FIFO. First in, first out) )Sequentielle Sortierung
1) add(anObject): Füge ein Objekt zur BlockingQueue hinzu, das heißt, wenn die BlockingQueue es aufnehmen kann, gib true zurück, andernfalls wird eine Ausnahme ausgelöst gemeldet
3)put(anObject): Füge einObject zur BlockingQueue hinzu. Wenn in der BlockQueue kein Platz vorhanden ist, wird der Thread, der diese Methode aufruft, blockiert, bis Platz in der BlockingQueue vorhanden ist, bevor fortgefahren wird Sofort raus, Sie können auf die durch den Zeitparameter angegebene Zeit warten. Wenn es nicht herausgenommen werden kann, geben Sienull
zurück. 5) take(): Nehmen Sie die BlockingQueue weg Das Objekt mit dem ersten Rang wird blockiert, wenn die BlockingQueue leer ist, und tritt in den Wartezustand ein, bis ein neues Objekt zur BlockingQueue hinzugefügt wird.
Beispiel: Dieses Beispiel hauptsächlich Simuliert den Arbeitsablauf zwischen Produzenten und Konsumenten und stellt ein einfaches Szenario dar, bei dem Konsumenten darauf warten, dass Produzenten Produkte produzieren, die die Konsumenten konsumieren.
Verbraucher:
Ausführungsklasse:package com.gefufeng; import java.util.concurrent.BlockingQueue; public class Producter implements Runnable{ private BlockingQueue<String> blockingQueue; public Producter(BlockingQueue<String> blockingQueue){ this.blockingQueue = blockingQueue; } @Override public void run() { try { blockingQueue.put("我生产的" + Thread.currentThread().getName()); System.out.println("我生产的" + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("生产失败"); } } }
Schleifen , um auf das Produkt zu warten, wenn blockingQueue.take() zum ersten Mal in der Schleife ausgeführt wird, kann kein Produkt abgerufen werden, sodass es zwei Sekunden später in den Blockierungsstatus wechselt Produkt, also Die blockingQueue hat das Produkt abgerufen, das Protokoll gedruckt, und dann hat der Verbraucher die zweite Schleife ausgeführt und festgestellt, dass blockingQueue.take() das Produkt nicht erneut erhalten hat, sodass es erneut in den Blockierungsstatus wechselte. . . Durchlaufen Sie
Das obige ist der detaillierte Inhalt vonBeispielcode-Analyse der Blockierungswarteschlange BlockingQueue in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!