next up previous contents
suivant: Synchronisation monter: Scheduling et priorités précédent: Priorités   Table des matières

Interruption

Une activité peut en interrompre une autre : elle positionne un flag dans l'activité destinataire.

Si une activité est en train d'exécuter une méthode qui a été déclarée comme pouvant lancer une InterruptedException (par exemple sleep()), interupt() lancera cette exception.

Pour certaines implémentations, le yield est nécessaire pour assurer que l'activité principale soit activée.



transparent
Interruption


// Main.java
import java.util.Random;
class Main {
    public static void main(String[] args) {
        Thread t = new Activite();
        t.start();
        Random rand = new Random();
        int p = Math.abs(rand.nextInt()%5000);
        System.out.println("Réveil dans " + p + "ms");
        try {
            Thread.sleep(p);
        } catch (InterruptedException e) {};
        System.out.println("Réveil...");
        t.interrupt();
    }
}


transparent
Interruption (suite)


// Activite.java
class Activite extends Thread {
     public void run() {
         while(!isInterrupted()){
             yield();
         }
         // interrupted() reset le flag
         System.out.println("tâche interrrompue");
      }
  }
}


transparent
InterruptedException


 class Activite extends Thread {
     public void run() {
         try {
             sleep(100000);
         } catch (InterruptedException e) {
         System.out.println("Réveillé");
         }
        
      }
  }
}




Hugues Fauconnier 2002-01-11