/**
* Adapted from The Java Tutorial
* Second Edition by Campione, M. and
* Walrath, K.Addison-Wesley 1998
*/
class CubbyHole{
private int contents;
private boolean available = false;
public int get(){
available = false;
return contents;
}
public void put(int value){
contents = value;
available = true;
}
}
class Consumer extends Thread{
private CubbyHole cubbyhole;
private int number;
public Consumer(CubbyHole c, int number){
cubbyhole = c;
this.number = number;
}
public void run(){
int value = 0;
for (int i = 0; i < 10; i++){
value = cubbyhole.get();
System.out.println("Consumer #" + this.number + " got: " + value);
/*
try{//delay a bit after get (consume) to allow next put (produce)
sleep((int)(Math.random() * 100));
} catch (InterruptedException e){ }
*/
}
}
}
class Producer extends Thread{
private CubbyHole cubbyhole;
private int number;
public Producer(CubbyHole c, int number){
cubbyhole = c;
this.number = number;
}
public void run(){
for (int i = 0; i < 10; i++){
cubbyhole.put(i);
System.out.println("Producer #" + this.number + " put: " + i);
/*
try{//delay a bit after put (produce) to allow next get (consume)
sleep((int)(Math.random() * 100));
} catch (InterruptedException e){ }
*/
}
}
}
public class ProducerConsumerTest1{
public static void main(String[] args){
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}