The Java Program: Consumer.java

  1 
  2 import java.util.Vector;
  3 
  4 class Producer implements Runnable {
  5    private Vector messages = new Vector();
  6    static int MAXQUEUE = 5;
  7  
  8    public void run() {
  9       try {
 10          while (true) {
 11             putMessage();
 12             Thread.sleep (1000);
 13          }
 14       } catch (InterruptedException e) { }
 15    }
 16 
 17    private synchronized void putMessage() throws InterruptedException {
 18       while (messages.size()==MAXQUEUE) wait();
 19       messages.addElement ( new java.util.Date().toString() );
 20       notifyAll();
 21    }
 22 
 23    public synchronized String getMessage() throws InterruptedException {
 24       notify();
 25       while (messages.size()==0) wait();
 26       String message = (String)messages.firstElement();
 27       messages.removeElement( message );
 28       return message;
 29    }
 30 }
 31 
 32 public class Consumer implements Runnable {
 33    Producer producer;
 34         
 35    Consumer (Producer p) {
 36       producer = p;
 37    }
 38  
 39    public void run() {
 40       String me = Thread.currentThread().getName();
 41       try {
 42          while (true) {
 43             String message = producer.getMessage();
 44             System.out.println (me + " got message: " + message);
 45             Thread.sleep (2000);
 46          }
 47       } catch (InterruptedException e ) { }
 48    }
 49  
 50    public static void main(String args[]) {
 51       Producer producer = new Producer();
 52       Thread p = new Thread (producer);
 53       p.start();
 54       Thread c1 = new Thread (new Consumer (producer), "One");
 55       c1.start();
 56       Thread c2 = new Thread (new Consumer (producer), "Two");
 57       c2.start();
 58    }
 59 }