public class ProducerConsumerProblem {
public static void main(String[] args) {
DataClass c=new DataClass();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}
class DataClass {
int data;
boolean dataAvailable = false;
public synchronized int get() throws InterruptedException {
while (dataAvailable == false) {
wait();
}
dataAvailable = false;
notifyAll();
return data;
}
public synchronized void setData(int content) throws InterruptedException {
while (dataAvailable == true) {
wait();
}
data = content;
dataAvailable = true;
notifyAll();
}
}
class Producer extends Thread {
private DataClass dataObject;
private int number;
public Producer(DataClass dataClassReference, int num) {
dataObject = dataClassReference;
number = num;
}
public void run() {
for (int i = 0; i < 10; i++) {
try {
dataObject.setData(i);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Producer #" + this.number + " put: " + i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
}
}
}
}
class Consumer extends Thread {
private DataClass dataObject;
private int number;
public Consumer(DataClass dataClassReference, int num) {
dataObject = dataClassReference;
number = num;
}
public void run() {
int value = 0;
for (int i = 0; i < 10; i++) {
try {
value = dataObject.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Consumer #" + this.number + " got: " + value);
}
}
}