Modèle producteur consommateur java

Un exemple simple avec deux Consumers. http://simpleapphub.blogspot.in/2016/02/simple-Producer-Consumer-Framework-in.html dans ce cas, étant donné que les opérations d`ajout ne bloquent pas, le producteur n`a pas à attendre lors de l`ajout de nouveaux éléments. Chaque fois que le producteur souhaite ajouter un nouvel élément, la file d`attente la stockera. Mais, il y a des captures ici. Si le consommateur ne supprime pas les éléments plus rapidement que le producteur ajoute de nouveaux éléments, alors la mémoire se remplira et nous obtiendrez une exception OutOfMemory. Avec seulement 10 tâches, le producteur peut être terminé avant le démarrage du consommateur. Si vous essayez 100 tâches, vous pouvez les trouver entrelacées. Ainsi, si vous utilisez la méthode put () et que la file d`attente est pleine, le producteur devra attendre qu`il y ait un slot gratuit. C`est ce que nous avons utilisé dans l`exemple précédent, et cela fonctionnera de la même manière que ProducerConsumerExample2. Dans le calcul, le problème producteur – consommateur (également connu sous le nom de problème de mémoire tampon délimitée) est un exemple classique de problème de synchronisation multi-processus. Le problème décrit deux processus, le producteur et le consommateur, qui partagent un tampon de taille fixe commun utilisé comme une file d`attente. Le problème producteur-consommateur est un exemple classique d`un problème de synchronisation multi-processus. Pour la plupart d`entre nous, ce problème est peut-être le premier problème de synchronisation que nous avons étudié de retour à l`école et ont été confrontés à des algorithmes parallèles pour la première fois.

Simple comme il est, il reprend le plus grand défi dans l`informatique parallèle-le partage d`une ressource unique par de multiples processus. Salut Javin,.. l`article d`un peu de choses que je veux ajouter à ce sujet est… BlockingQueue code ExampleHere est un exemple d`utilisation d`un BlockingQueue. L`exemple utilise l`implémentation ArrayBlockingQueue de l`interface BlockingQueue. Tout d`abord, la classe BlockingQueueExample qui démarre un producteur et un consommateur dans des threads distincts. Le producteur insère des chaînes dans un BlockingQueue partagé, et le consommateur les sort. Public Class BlockingQueueExample {public static void main (String [] args) lève exception {BlockingQueue queue = New ArrayBlockingQueue (1024); Producteur de producteurs = nouveau producteur (file d`attente); Consommation consommateur = nouveau consommateur (file d`attente); New Thread (Producer). Start (); New Thread (Consumer). Start (); Thread.

Sleep (4000); }} Voici la classe producteur. Remarquez comment il dort une seconde entre chaque appel put (). Cela entraînera le blocage du consommateur, en attendant les objets dans la file d`attente. Public Class Producer implémente Runnable {protected BlockingQueue queue = null; public Producer (BlockingQueue queue) {This. queue = queue;} public void Run () {Try {queue. put («1″); Thread. Sleep (1000); queue. put («2″); Thread.

Sleep (1000); queue. put («3″); } catch (InterruptedException e) {e. printStackTrace ();}}} Voici la classe Consumer.

Комментарии закрыты.