/*
 * Example from Script 2.1.
 *
 * int x = 0, y = 0, z;
 * con
 *   z = x + y;
 *   x = x + 1;
 *   y = y + 2;
 * end
 * println "x=", x, ", y=", y, ", z=", z;
 */
/* output:
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 1
   x = 1, y = 2, z = 0
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 3
   x = 1, y = 2, z = 2
   x = 1, y = 2, z = 2
*/

public class ex1 {

  public static int x, y, z;

  public static int p = 100; 
 
  public static void main(String[] args) throws InterruptedException {

    if (args.length == 1) { 
       try { p = Integer.parseInt(args[0]); } 
       catch (NumberFormatException e) { } 
    } 

    for (int i=0; i<50; i++) {

      x = 0; y = 0; z = 0;

      Thread t1 = new Thread(new ex1act1());
      Thread t2 = new Thread(new ex1act2());
      Thread t3 = new Thread(new ex1act3());

      t1.start();
      t2.start();
      t3.start();

      t1.join();
      t2.join();
      t3.join();

      System.out.println("x = " + x + ", y = " + y + ", z = " + z);
    }
  }
 
  public static void probe() { 
    Sleep.sleep(p);
  }

}

class ex1act1 implements Runnable {
  public void run() {
    ex1.probe();
    ex1.z = ex1.x + ex1.y;
  }
}

class ex1act2 implements Runnable {
  public void run() {
    ex1.probe();
    ex1.x = ex1.x + 1;
  }
}

class ex1act3 implements Runnable {
  public void run() {
    ex1.probe();
    ex1.y = ex1.y + 2;
  }
}
