Exemple 2
WB01624_.gif (281 octets) RETOUR

          Exemple :

public class CoordonneeSync {
  private int cx ;
  private int cy ;

  public int x() {
    return(cx) ;
    }

  public int y() {
    return(cy) ;
    }

  public synchronized void set(int xx,int yy) {
    cx = xx ;
    cy = yy ;
    }
  }
import java.applet.Applet ;

public class AfficheurSync extends Thread {
  private CoordonneeSync c ;
  private Applet a ;
  private boolean ok = true ;

  public AfficheurSync (CoordonneeSync co,Applet ap) {
    c = co ;
    a = ap ;
    }

  public void run() {
    while ( ok ) {
      a.repaint() ;
      try {
        Thread.sleep(1000) ; }
      catch ( Exception e ) { } ;
      }
    }
  }
public class ModifieurSync extends Thread {
  private CoordonneeSync c ;
  private boolean ok = true ;

  public ModifieurSync (Coordonnee co) {
    c = co ;
    }

  public void run() {
    while ( ok ) {
      c.set(c.x()+1,c.y()+1) ; }
    }
  }
import java.applet.Applet ;
import java.awt.Graphics ;

public class Synchro2 extends Applet {
  private CoordonneeSync c ;
  private AfficheurSync a ;
  private ModifieurSync b ;
  private int cpt = 0 ;

  public void init() {
    c = new CoordonneeSync () ;
    Afficheur a = new AfficheurSync(c,
                          (Applet) this) ;
    a.start() ;
    Modifieur b = new ModifieurSync (c) ;
    b.start() ;
    }

  public void paint(Graphics g) {
    synchronized (c) {
      int x = c.x() ;
      String sx = new Integer(x).toString() ;
      g.drawString(sx,10,15) ;
      int y = c.y() ;
      String sy = new Integer(y).toString() ;
      g.drawString(sy,100,15) ;
      if ( x != y )
        cpt++ ;
      String sc = new Integer(cpt).toString() ;
      g.drawString(sc,200,15) ; }
    }
  }