Qu'est-ce que BlockingQueue en Java et comment l'implémenter?



Cet article sur BlockingQueue en Java vous aidera à en savoir plus sur l'interface BlockingQueue. Il vous donnera également un aperçu de ses méthodes et de sa mise en œuvre pratique

est extrêmement populaire parmi les programmeurs en raison de sa gamme complète de fonctionnalités intégrées. La plupart du temps, vous aurez une solution dédiée à votre problème avant même qu'il n'apparaisse. Une telle partie extrêmement utile et importante de est l'interface BlockingQueue en Java. À travers cet article, je vais jeter un peu de lumière sur BlockingQueue en Java et les méthodes pour l'implémenter.

Vous trouverez ci-dessous les sujets abordés dans cet article:





Interface BlockingQueue en Java

BlockingQueue en Java est une interface qui a été ajoutée dans Java 1.5 avec quelques autres classes d'utilitaires simultanées telles que ConcurrentHashMap, CopyOnWriteArrrayList, etc. L'interface BlockingQueue appartient à la java.util.concurrent paquet .Cette interface améliore le contrôle de flux en activant le blocage, au cas où un thread essaie de retirer une file vide ou de mettre en file d'attente une file d'attente complète. Dans les deux cas, cette interface est pratique.En termes plus simples, supposons qu'un essaie d'ajouter des éléments dans une file d'attente déjà pleine. À ce stade du programme, BlockingQueue sera appelé, ce qui bloquera ce thread particulier jusqu'à ce qu'un autre thread libère la file d'attente pour libérer de l'espace. Cela peut résulter soit de la suppression de la file d'attente d'un ou de plusieurs éléments de libération de toute la file d'attente. De même, BlockingQueue sera appelé pour bloquer un thread essayant de retirer une file d'attente déjà vide jusqu'à ce qu'un autre thread insère ou ajoute un élément dans le vide queue .

java cast double en int

Lorsque vous travaillez avec l'interface BlockingQueue en Java, vous devez vous rappeler qu'elle n'accepte pas une valeur nulle. Au cas où vous essayez de le faire, il lancera instantanément une NullPointerException. La figure ci-dessous représente le fonctionnement de l'interface BlockingQueue en Java.



BlockingQueue - BlockingQueue en Java - EdurekaCette interface est principalement utilisé entre les producteurs et les consommateurs car il est sans fil.Ce que je veux dire, c'est que l'interface BlockingQueue peut être utilisée pour créer une file d'attente qui peut être partagée par le producteur et le consommateur

Pour travailler avec BlockingQueue en Java, vous devez d'abord vous familiariser avec ses types. Permettez-moi de vous les présenter dans la section suivante de cet article.

Types de constructeurs pour BlockingQueue en Java

Il existe deux types de constructeurs pour l'interface BlockingQueue en Java:



  • File d'attente illimitée: Pour ce type de file d'attente, la capacité sera définie sur Integer.MAX_VALUE. Une file d'attente illimitée ne sera jamais bloquée car elle peut croître dynamiquement, chaque fois qu'un élément y est inséré. Voici la syntaxe pour créer une file d'attente illimitée:
BlockingQueue bq = nouveau LinkedBlockingDeque ()
  • File d'attente limitée: Pour ce type de file d'attente, vous devez passer la capacité de la file d'attente au moment de sa création c'est-à-dire comme un constructeur paramètre. Une fois la taille attribuée, elle ne peut pas être modifiée. Voici la syntaxe pour créer une file d'attente limitée:
BlockingQueue bq = nouveau LinkedBlockingDeque (10)

Maintenant que vous connaissez les moyens d'implémenter BlockingQueue en Java, permettez-moi de lister quelques-unes de ses méthodes.

Méthodes dans l'interface BlockingQueue

Méthode La description
booléen ajouter (E e) Cette méthode aide à insérer l'élément spécifié dans cette file d'attente s'il y a de l'espace dans la file d'attente sinon il le ferajeter unIllegalStateException
boolean contient (Object o) Cette méthode renvoie true si la file d'attente contient l'élément spécifié
int drainTo (Collection c) Cette méthode supprimera tous les éléments disponibles de la file d'attente et les ajoutera à la collection spécifiée
int drainTo (Collection c, int maxElements) Cette méthode supprimera au nombre donné d'éléments disponibles de la file d'attente et les ajoutera dans le
offre booléenne (E e) Cette méthode insérera l'élément spécifié dans la file d'attente s'il n'est pas plein et retournera true, sinon elle retournera false
offre booléenne (E e, long timeout, unité TimeUnit) Cette méthode insère l'élément spécifié dans la file d'attente. Si la file d'attente est pleine, elle attendra jusqu'au temps d'attente spécifié pour que l'espace devienne disponible.
Sondage E (long timeout, unité TimeUnit) Cette méthode aide à récupérer et à supprimer la tête de la file d'attente. Dans le cas où la file d'attente est vide, elle attendra jusqu'au temps d'attente spécifié pour qu'un élément devienne disponible
vide mis (E e) Cette méthode insérera l'élément spécifié dans la file d'attente en attendant que l'espace devienne disponible au cas où la file d'attente est pleine
int restantCapacité () Cette méthode permet de renvoyer le nombre d'éléments supplémentaires que cette file d'attente peut idéalement accepter sans se bloquer
boolean remove (objet o) Cette méthode supprimera une seule instance de l'élément spécifié de la file d'attente uniquement si elle est présente
E prendre () Cette méthode aidera à récupérer et à supprimer la tête de la file d'attente en attendant qu'un élément devienne disponible, au cas où la file d'attente serait vide.

Implémentations BlockingQueue

Ici, je vais implémenter un exemple simple de BlockingQueue en Java oùLa classe EduProducer générera les données et les insérera dans un queue , simultanément, une autre classe, EduConsumer supprimera les données de la même file d'attente.

Pour cela, je créerai 3 classes à savoir:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Créons maintenant chacune de ces classes une par une.

EduProducer.java

java comment créer un tableau d'objets
package edureka import java.util.concurrent.BlockingQueue classe publique EduProducer implémente Runnable {Private Final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () jette InterruptedException {// Mettre 10 ints dans la file d'attente pour (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

package edureka import java.util.concurrent.BlockingQueue classe publique EduConsumer implémente Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} processus privé void (Integer take) lance InterruptedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (file d'attente BlockingQueue) {this.queue = queue}}

EdurekaMain.java

package edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue classe publique EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (file d'attente)) .start () new Thread (new EduConsumer (file d'attente)). start ()}}

Une fois que vous avez terminé d'écrire le code, exécutez le programme pour obtenir la sortie ci-dessous:

code python décimal à binaire
[Producteur] Ajouter: 0 [Consommateur] Prendre: 0 [Producteur] Capacité restante de la file d'attente: 9 [Producteur] Ajouter: 1 [Producteur] Capacité restante de la file d'attente: 9 [Producteur] Ajouter: 2 [Producteur] Capacité restante de la file d'attente: 8 [Producteur] ] Ajouter: 3 [Producteur] Capacité restante de la file d'attente: 7 [Consommateur] Prise: 1 [Producteur] Ajouter: 4 [Producteur] Capacité restante de la file d'attente: 7 [Producteur] Ajouter: 5 [Producteur] Capacité restante de la file d'attente: 6 [Producteur] Ajouter : 6 [Producteur] Capacité restante de la file d'attente: 5 [Consommateur] Prise: 2 [Producteur] Ajouter: 7 [Producteur] Capacité restante de la file d'attente: 5 [Producteur] Ajouter: 8 [Producteur] Capacité restante de la file d'attente: 4 [Producteur] Ajouter: 9 [Producteur] Capacité restante de la file d'attente: 3 [Consumer] Take: 3 [Consumer] Take: 4 [Consumer] Take: 5 [Consumer] Take: 6 [Consumer] Take: 7 [Consumer] Take: 8 [Consumer] Take: 9

Cela nous amène à la fin de cet article sur BlockingQueue en Java. Si vous souhaitez apprendre Java plus en détail, vous pouvez consulter notre ainsi que.

Maintenant que vous avez compris les bases de BlockingQueue en Java, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels souhaitant devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de cette «BlockingQueue en Java» et nous vous répondrons dans les plus brefs délais.