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

Priorités

Le « schedule » des tâches n'est pas tenu d'être équitable. Les activités de basse priorité ne sont exécutées que si celles de priorité plus élevées sont bloquées. Mais, java assure que toutes les activités de plus hautes priorités seront, un jour, activées.

La méthode yield() permet à une activité de rendre la main et provoque un « rescheduling ».



transparent
Priorités des activités


class Main {
    public static void main(String args[] ) {
        // Une Activite par intervalle de priorité
        Activite[] acts = 
            new Activite[Thread.MAX_PRIORITY-Thread.MIN_PRIORITY];
        // Démarrer les Activites avec leur priorité
        for (int i=0; i< acts.length; i++) {
            acts[i] = new Activite(Thread.MIN_PRIORITY+i);
            acts[i].start();
        }
        for (int i=acts.length-1; i >= 0; i--) {
            try {acts[i].join();} catch (Exception e) {}
            System.out.println(acts[i].getName() + ": " +
                acts[i].time + " ms");
        }
    }
}


transparent
Activités (suite)


  class Activite extends Thread {
    // regarder l'heure de création
    long time = System.currentTimeMillis();
    Activite(int priorité) {
        setPriority(priorité);
        setName("Activité de priorité :"+priorité);
    }
    public void run() {
        // Commencer le travail
        float r = 0;
        for (int i=1; i<1024; i++) {
            r += i + r/i;
        }
        // Regarder l'heure.
        time = System.currentTimeMillis() - time;
    }
}


transparent
Résultat :


Activité de priorité :9: 2 ms
Activité de priorité :8: 3 ms
Activité de priorité :7: 3 ms
Activité de priorité :6: 2 ms
Activité de priorité :5: 6 ms
Activité de priorité :4: 44 ms
Activité de priorité :3: 53 ms
Activité de priorité :2: 59 ms
Activité de priorité :1: 66 ms




Hugues Fauconnier 2002-01-11