I'm attaching the ThreadTest file which I forgot to include in
my benchmark message.

Alexander
public class ThreadTest extends Thread {

  public static final long MAX_COUNT = 1000000000;
  public final char id;
  public long counter = 0;
  public ThreadTest peer = null;
  public boolean isYield = false;
  public boolean isNoop = false;

  public ThreadTest(char id) {
    super("Thread" + id);
    this.id = id;
  }

  public void noop() {
  }

  public void setYield(boolean isYield) {
    this.isYield = isYield;
  }

  public void setNoop(boolean isNoop) {
    this.isNoop = isNoop;
  }

  public void setPeer(ThreadTest peer) {
    this.peer = peer;
  }
                                   
  public void run() {
    long startTime = System.currentTimeMillis();

    while(counter < MAX_COUNT) {
      if ( (isYield) && (counter % 1000 == 0) ) {
        yield();
      } else if ( (isNoop) && (counter % 1000 == 0) ) {
        noop();
      }
      counter++;
    }
    
    System.out.print("Thread" + id + " " + 
                     (System.currentTimeMillis() - startTime) + " ms");
    if (peer != null) {
      int percent = (int) ((((double) peer.counter) / MAX_COUNT) * 100);
      System.out.print(" [peer counter=" + peer.counter + " (" +
                         percent + "%) ]");
    }

    System.out.println(" isYield=" + isYield + " isNoop=" + isNoop);
  }

  /**
   * Usage:
   *
   * java ThreadTest
   * java ThreadTest thread1
   * java ThreadTest thread1 yield
   * java ThreadTest thread2
   * java ThreadTest thread2 yield
   */
  public static void main(String[] args) {

    ThreadTest thread1 = new ThreadTest('1');
    ThreadTest thread2 = new ThreadTest('2');

    thread1.setPeer(thread2);
    thread2.setPeer(thread1);

    boolean isYield = false;
    boolean isNoop = false;
    if (args.length > 1) {
      if (args[1].equals("yield")) {
        isYield = true;
      } else if (args[1].equals("noop")) {
        isNoop = true;
      } else {
        System.err.println("Unknown argument '" + args[1] + "'");
        System.exit(1);
      }
    }

    if (args.length == 0) {
      // Same priority as main thread
    } else if (args[0].equals("thread1")) {
      thread2.setPriority(Thread.MIN_PRIORITY);
      thread1.setYield(isYield);
      thread1.setNoop(isNoop);
    } else if (args[0].equals("thread2")) {
      thread1.setPriority(Thread.MIN_PRIORITY);
      thread2.setYield(isYield);
      thread2.setNoop(isNoop);
    } else {
      System.err.println("Unknown argument '" + args[0] + "'");
      System.exit(1);
    }   

    thread1.start();
    thread2.start();
  }
}

    

Reply via email to