InterruptionExample.java

import java.io.*;
public class InterruptionExample implements Runnable {  
  private int id;
  /** Crée un objet code d'identifiant id. */
  public InterruptionExample(int id) {
    this.id = id;
  }
  /** Définition du code à exécuter par le processus léger. */
  public void run() {
    // Tant que le statut d'interruption n'est pas détecté
    while (!Thread.interrupted()) {
      System.out.println("Exécution de l'objet code " + id);
      try {
    // Attend quelques instants (entre 0 et 10 secondes).
    Thread.sleep(Math.round(10000 * Math.random()));
      } catch (InterruptedException ie) {
    // La levée de l'exception a réinitialisé le statut
    // d'interruption. Il faut donc réinterrompre le processus
    // léger courant pour repositionner le statut d'interruption.
    System.out.println(Thread.currentThread().isInterrupted());
    // Affiche: false
    Thread.currentThread().interrupt();
    System.out.println(Thread.currentThread().isInterrupted());
    // Affiche: true
      }
    }
    System.out.println("Fin d'exécution du code " + id);
    // L'appel à interrupted() a réinitialisé le statut d'interruption
    System.out.println(Thread.currentThread().isInterrupted());
    // Affiche: false
  }
  /** Test avec deux processus légers. */
  public static void main(String[] args) throws IOException {
    // Création et démarrage de deux processus légers
    Thread t1 = new Thread(new InterruptionExample(1));
    Thread t2 = new Thread(new InterruptionExample(2));
    t1.start();
    t2.start();
    // Lecture du numéro du processus léger à interrompre
    BufferedReader br =
      new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Taper le numéro du processus léger à arrêter");
    switch (Integer.parseInt(br.readLine())) {
    case 1: 
      t1.interrupt(); break;
    case 2:
      t2.interrupt(); break;
} } }