Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Producteur-Consommateur | Meilleures Pratiques de Multithreading
Multithreading en Java
course content

Contenu du cours

Multithreading en Java

Multithreading en Java

1. Notions de Base du Multithreading
2. Collections Synchronisées
3. Mécanismes de Synchronisation de Haut Niveau
4. Meilleures Pratiques de Multithreading

book
Producteur-Consommateur

Bon travail ! Vous avez parcouru un long chemin, et nous avons exploré beaucoup de théorie et d'exemples pratiques !

Vous avez peut-être rencontré le modèle Producer-Consumer dans d'autres sections, mais vous ne l'avez peut-être pas réalisé. Dans cette section, nous en discuterons en détail, et si quelque chose des exemples précédents n'était pas clair, cela deviendra clair dans cette section !

Le modèle Producer-Consumer implique deux types de threads, qui sont clairs d'après le nom : Producer et Consumer.

Le Producer produira des données qu'il mettra dans un tampon/queue partagé auquel le Consumer a également accès, et il se contentera de consommer ces données depuis l'emplacement de stockage des données.

Remarque

Le principal objectif du modèle est de séparer la production et la consommation de données, permettant aux producteurs de fonctionner indépendamment des consommateurs.

Où il est utilisé

Ce modèle est couramment employé dans les systèmes où un traitement de données asynchrone est requis. Nous explorerons en détail ce que signifie asynchrony plus tard.

En pratique, ce modèle est fréquemment utilisé pour les systèmes de traitement d'événements, la journalisation des données, la gestion des requêtes réseau et le traitement parallèle des données.

Imaginez un tapis roulant dans une usine où un ouvrier place des pièces sur le tapis roulant (producteur), et un autre ouvrier les retire et les assemble en un produit (consommateur). Le producteur et le consommateur peuvent fonctionner à des vitesses différentes, mais le tapis roulant (tampon) les aide à rester synchronisés.

À quoi cela ressemble-t-il dans le code ?

Considérons un exemple d'utilisation de BlockingQueue pour implémenter le modèle Producer-Consumer.

Remarque

Vous pouvez basculer entre les onglets, et c'est ainsi que vous accéderez au code dont vous avez besoin.

java

ExampleProducerConsumer

java

Consumer

java

Producer

copy
12345678910
public class ExampleProducerConsumer { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); // Shared queue Thread producerThread = new Thread(new Producer(queue)); Thread consumerThread = new Thread(new Consumer(queue)); producerThread.start(); // Start producer thread consumerThread.start(); // Start consumer thread } }

Ce programme illustre le modèle Producer-Consumer en utilisant BlockingQueue pour assurer des interactions sûres entre les threads.

Une BlockingQueue est établie pour agir comme un tampon partagé pour les threads Producer et Consumer.

La classe Producer génère des nombres de 0 à 9 et les ajoute à la queue, puis place une valeur de signalisation de -1 pour indiquer que la production est terminée.

La classe Consumer récupère à plusieurs reprises des nombres de la queue. Lorsqu'elle rencontre la valeur de signalisation -1, elle cesse de consommer.

Dans la méthode principale, la queue partagée est initialisée, et les threads producer et consumer sont créés et démarrés. Le Producer ajoute des éléments à la queue tandis que le Consumer traite ces éléments.

Pourquoi est-il utilisé ?

Le modèle Producer-Consumer est utilisé pour accomplir plusieurs objectifs :

  • Synchronisation des threads : Permet aux threads d'échanger des données de manière sécurisée ;
  • Amélioration des performances : Les producteurs et les consommateurs peuvent travailler en parallèle sans se bloquer mutuellement ;
  • Mise en tampon : Le tampon aide à équilibrer les différences de vitesse entre la production et la consommation.

Remarque

Le modèle Producer-Consumer aide à organiser une interaction sûre et efficace entre les threads dans la programmation multithread. Il permet aux producteurs et aux consommateurs de travailler indépendamment en utilisant un tampon pour la synchronisation, ce qui améliore les performances et prévient le blocage.

1. Quel rôle remplit la classe Producer dans le modèle Producer-Consumer ?

2. Que fait la valeur de signal -1 dans le programme d'exemple donné ?

Quel rôle remplit la classe Producer dans le modèle Producer-Consumer ?

Quel rôle remplit la classe Producer dans le modèle Producer-Consumer ?

Sélectionnez la réponse correcte

Que fait la valeur de signal -1 dans le programme d'exemple donné ?

Que fait la valeur de signal -1 dans le programme d'exemple donné ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1
We're sorry to hear that something went wrong. What happened?
some-alt