MultiMaster.java

/**
 * Classe définissant le code à exécuter par le maître.
 */
public class MultiMaster implements Runnable {
  // Arguments de la multiplication
  private double[] operand;
  /** Crée un objet code cible pour le maître de la multiplication. */
  public MultiMaster(double[] operand) {
    this.operand = operand;
  }
  /** Méthode à exécuter par le processus léger. */
  public void run() {
    // Création et démarrage de l'esclave
    MultiSlave slaveCode = new MultiSlave(operand);
    Thread slaveThread = new Thread(slaveCode);
    System.out.println("maître : démarrage de l'esclave");
    slaveThread.start();
    // Traitements éventuels et attente de terminaison de l'esclave
    try {
      slaveThread.join();
      System.out.println("maître : terminaison esclave détectée");
    } catch(InterruptedException ex) {
      // Si join() est interrompu, on n'est pas garanti d'avoir le 
      // résultat: on repositionne le statut et on sort de run()
      Thread.currentThread().interrupt();
      return;
    }
    // Récupération du résultat
    double result = slaveCode.result();
    System.out.println("maître : résultat = " + result);
    System.out.println("maître : terminaison");
  }
}