Aide mémoire : pattern producteur/consommateur en java

Aide mémoire (Développement) / Uncategorized
Petit aide mémoire pour l’implémentation du pattern producteur/consommateur en java.

1. Le producteur
2. Le consommateur
3. Exemple de lanceur
4. Source & notes

1. Le producteur

import java.util.concurrent.BlockingQueue ;

public class Producteur implements Runnable {

    private final BlockingQueue sharedQueue;

    public Producteur(BlockingQueue sharedQueue) {
        this.sharedQueue = sharedQueue;
    }

    @Override
    public void run() {
        // la génération d'objet de type T 		
        sharedQueue.put(object);
    }
}

2. Le consommateur

import java.util.concurrent.BlockingQueue ;

public class Consommateur implements Runnable {

    private final BlockingQueue sharedQueue;

    public Consommateur(BlockingQueue sharedQueue) {
        this.sharedQueue = sharedQueue;
    }

    @Override
    public void run() {
        while (true) {
            try {
                T object = sharedQueue.take();
                // l'utilisation de l'object reste a coder 			
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

3. Exemple de lanceur

    public static void main(String args[]) {
        //Creating shared object 	
        BlockingQueue sharedQueue = new LinkedBlockingQueue();
        //Creating Producer and Consumer Thread 	
        Thread prodThread = new Thread(new Producteur(sharedQueue));
        Thread consThread = new Thread(new Consommateur(sharedQueue));  	
        //Starting producer and Consumer thread 	
        prodThread.start(); 	
        consThread.start(); }
    }

4. Source & notes
Dans certains cas, le lanceur et le producteur sont fusionnés.
Dans ce cas :

  • Le constructeur du producteur créée l’instance du consommateur, lui donne la sharedQueue en paramètre, et finit par appeler la méthode start() du consommateur.
  • Le producteur n’implémente pas runnable, mais dispose quand même d’une fonction permettant d’ajouter des éléments à la sharedQueue .
  • Le consommateur dispose en général d’une méthode d’arrêt, appelé par le lanceur.

Source :
http://javarevisited.blogspot.fr/2012/02/producer-consumer-design-pattern-with.html

Pour en savoir plus :
http://blog.paumard.org/cours/java-api/chap05-concurrent-queues.html