next up previous contents
suivant: Moniteur monter: synchronized précédent: synchronized   Table des matières

verrou sur une référence

Il peut s'appliquer à une expression qui doit être évaluée comme une référence à un objet. On a dans ce cas un système de verrou qui assure l'accès en exclusion mutuelle pour le code concerné. On réalise dans l'exemple suivant un protocole (simple) d'exclusion mutuelle.



transparent
Exclusion mutuelle


import java.util.Random;
class Main{
    public static void main(String[] args){
        Vide v= new Vide();
        Thread t1 = new Proc("un",v);
        Thread t2 = new Proc("deux",v);
        Thread t3 = new Proc("trois",v);
        t1.start();t2.start();t3.start();
    }
}
class Vide{};
class Proc extends Thread{
    Vide v;
    public Proc(String n, Vide v){
        super(n); this.v = v;
    } // ...


transparent
Exclusion mutuelle (suite)


//...
  public void run(){
        int p; Random rand = new Random();
        while (true){
            try {
                p=Math.abs(rand.nextInt()%5000);
                sleep(p);
                synchronized(v){
                    System.out.println(getName()+ " début de em" );
                    p=Math.abs(rand.nextInt()%5000);
                    sleep(p);
                    System.out.println(getName()+ " fin de em");
                } 
            } catch (InterruptedException e){}
        }
    }
}




Hugues Fauconnier 2002-01-11