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 }