NumberedThread.java

/** Classe des processus légers numérotés. */
public class NumberedThread extends Thread {
  private CircularCounter counter;
  private int number;
  /** Crée un processus légers numéroté number et régi par counter. */
  public NumberedThread(int number, CircularCounter counter) {
    this.number = number;
    this.counter = counter;
  }
  /** Méthode à exécuter par le processus léger lorsqu'il est démarré. */
  public void run() {
    for (;;) {
      synchronized (counter) {  // Prise du moniteur associé au compteur
    while (number != counter.getValue())
      try {                 // Attente du bon numéro dans le compteur
        counter.wait();
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    System.out.println("Processus léger " + number + " s'exécute");
    // Incrément du compteur et réveil des autres processus légers
    counter.increment();
    counter.notifyAll();
      } // Libération du moniteur associé au compteur
    }
  }
  /** Exécution ordonnée de cinq processus légers numérotés. */
  public static void main(String[] args) {
    // Création d'un compteur circulaire de 0 à 4
    CircularCounter counter = new CircularCounter(5);
    // Création et démarrage des processus légers numérotés correspondant
    for (int i=4; i>=0; i--) 
      new NumberedThread(i, counter).start();
    System.out.println("Terminaison du processus léger initial.");
  }
}