/**************************************************************************/
 
/* Programmer: Naoki Chigai                                               */
 
/* File Name: Runner.java                                                 */
 
/* Date: 11/14/96                                                         */
 
/* Compiler: CodeWarrior IDE, version 1.7.2                               */
 
/**************************************************************************/
 
 
 
 [Back]        [output]
 


 
import java.util.Random;
 
 
 
class Runner extends Thread {
 
 
 
    private static final int NUMBER_OF_RUNNERS = 3;
 
    private static final int LENGTH_OF_TRACK = 10 + 1;
 
    private static final int MIN_OF_SLEEP_TIME = 50;
 
    private static final int MAX_OF_SLEEP_TIME = 1000;
 
    
 
    private static Runner[] runner;
 
    private static boolean everyoneIsStarted = false;
 
    private static boolean SomeoneReachedGoal = false;
 
    private static String winner = null;
 
    private static Random random;
 
 
 
    public void run() {
 
           while (!everyoneIsStarted) yield(); 
 
           for (int i = 0; i < LENGTH_OF_TRACK; i++) {
 
               printPosition(i);
 
               try {
 
                      int sleepTime = (int)(Math.round(random.nextFloat() 
 
                          * (MAX_OF_SLEEP_TIME - MIN_OF_SLEEP_TIME) + MIN_OF_SLEEP_TIME));
 
                      if (i + 1 >= LENGTH_OF_TRACK) {
 
                          synchronized (getClass()) {
 
                                 if (winner == null) {
 
                                     winner = getName();
 
                                     SomeoneReachedGoal = true;
 
                                 }
 
                          }
 
                       } else
 
                          sleep(sleepTime);
 
               } catch (InterruptedException doesNotCare) {
 
               }
 
           }
 
    }
 
    
 
    private void printPosition(int position) {
 
           String pluses = "";
 
           for (int i = 0; i < position; i++) {
 
               pluses = pluses + "+";
 
           }
 
           System.out.println(getName() + ": " + pluses);
 
           System.out.flush();
 
    }
 
    
 
    static public void main(String args[]) {
 
           runner = new Runner[NUMBER_OF_RUNNERS];
 
           random = new Random();
 
           for (int i = 0; i < NUMBER_OF_RUNNERS; i++) {
 
               runner[i] = new Runner();
 
               runner[i].setName("Runner" + i);
 
               runner[i].setPriority(5);
 
           }
 
           for (int i = 0; i < NUMBER_OF_RUNNERS; i++) {
 
               runner[i].start();
 
           }
 
           everyoneIsStarted = true;
 
           while (!SomeoneReachedGoal);
 
           try {
 
               sleep(2000);
 
           } catch (InterruptedException doesNotCare) {
 
           } 
 
           System.out.println("Winner is " + winner + ".");
 
    }
 
    
 
}
 
 
 


 
 [Back]        [output]