next up previous contents
Next: Threads Example 5.2 Up: Java Notes Previous: Threads: Priorities

Threads Example 5.1

/**
 * Adapted from The Java Tutorial
 * Second Edition by Campione, M. and
 * Walrath, K.Addison-Wesley 1998
 */
class SelfishRunner extends Thread {

  private int tick = 1;
  private int num;
  
  public SelfishRunner(int num) {
	this.num = num;
  }
  
  public void run() {
	while (tick < 400000) {
	  tick++;
	  if ((tick % 50000) == 0)
		System.out.println("Thread #" + num + ", tick = " + tick);
	}
  }
}

class PoliteRunner extends Thread {
  
  private int tick = 1;
  private int num;
  
  public PoliteRunner(int num) {
	this.num = num;
  }
  
  public void run() {
	while (tick < 400000) {
	  tick++;
	  if ((tick % 50000) == 0){
		System.out.println("Thread #" + num + ", tick = " + tick);
		yield();
	  }
	}
  }
}

public class RaceTest {
  
  private final static int NUMRUNNERS = 2;
  
  public static void main(String[] args) {
	System.out.println("Selfish Runner:");
	SelfishRunner[] runners = new SelfishRunner[NUMRUNNERS];
	for (int i = 0; i < NUMRUNNERS; i++) {
	  runners[i] = new SelfishRunner(i);
	  runners[i].setPriority(2);
	}
	for (int i = 0; i < NUMRUNNERS; i++)
	  runners[i].start();

	try{
	  Thread.sleep(10000);
	}
	catch(InterruptedException e){
	}
	for (int i = 0; i < NUMRUNNERS; i++)
	  runners[i]=null;

	System.out.println("Polite Runner:");
	PoliteRunner[] runners2 = new PoliteRunner[NUMRUNNERS];
  
	for (int i = 0; i < NUMRUNNERS; i++) {
	  runners2[i] = new PoliteRunner(i);
	  runners2[i].setPriority(2);
	}
	for (int i = 0; i < NUMRUNNERS; i++)
	  runners2[i].start();
  }
}



Ananda Amatya
9/15/1999