import Utilities.*;
import Synchronization.*;

class Worker extends MyObject implements Runnable {

   private int id = -1;
   private MessagePassing channel = null;

   public Worker(int id, MessagePassing channel) {
      this.id = id;
      this.channel = channel;
      new Thread(this).start();
   }

   public void run() {
      int item = id;
      send(channel, item);
   }
}

class MergeSort extends MyObject {

   public static void main(String[] args) {
      int numWorkers = 2;
      AsyncMessagePassing[] channel =
         new AsyncMessagePassing[numWorkers];
      for (int i = 0; i < numWorkers; i++) {
         channel[i] = new AsyncMessagePassing();
         new Worker(i, channel[i]);
      }
      for (int i = 0; i < numWorkers; i++) {
         int value = receiveInt(channel[i]);
         System.out.println("MergeSort received value " + value
            + " on channel " + i);
      }
   }
}

/* ............... Example compile and run(s)

D:\>javac meso.java

D:\>java MergeSort
MergeSort received value 0 on channel 0
MergeSort received value 1 on channel 1
                                ... end of example run(s)  */
