import java.util.Random; class Producer implements Runnable { BoundedBuffer b = null; public Producer(BoundedBuffer initb) { b = initb; new Thread(this).start(); } public void run() { double item; Random r = new Random(); while (true) { item = r.nextDouble(); System.out.println("produced item " + item); b.deposit(item); Util.mySleep(200); } } } class Consumer implements Runnable { BoundedBuffer b = null; public Consumer(BoundedBuffer initb) { b = initb; new Thread(this).start(); } public void run() { double item; while (true) { item = b.fetch(); System.out.println("fetched item " + item); Util.mySleep(50); } } } class ProducerConsumer { public static void main(String[] args) { BoundedBuffer buffer = new BoundedBuffer(); Producer producer = new Producer(buffer); Consumer consumer = new Consumer(buffer); } }