Monday, September 3, 2012

Producer Consumer Problem


Examle for Producer - consumer problem using Java threads:

import
java.util.Stack;
 
public
class ManfacturingUnit {
private static boolean isAvailable = false;
private static Stack<Integer> basket = new Stack<Integer>();
public static void main(String[] args) {
ManfacturingUnit manfacturingUnit =
new ManfacturingUnit();
manfacturingUnit.
new Producer().start();
manfacturingUnit.
new Consumer().start();
}
class Consumer extends Thread {
@Override
public void run() {
for (int i = 1; i < 10;) {
synchronized (basket) {
if (isAvailable) {
System.
out.println("Consume->"+ basket.pop());
basket.notify();
isAvailable = false;
i++;
}
else {
try {
basket.wait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Producer extends Thread {
@Override
public void run() {
for (int i = 1; i < 10;) {
synchronized (basket) {
if (!isAvailable) {
basket.push(i);
System.
out.println("Produced->"+ i);
basket.notify();
isAvailable = true;
i++;
}
else {
try {
basket.wait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}


Output:
Produced->1
Consume->1
Produced->2
Consume->2
Produced->3
Consume->3
Produced->4
Consume->4
Produced->5
Consume->5
Produced->6
Consume->6
Produced->7
Consume->7
Produced->8
Consume->8
Produced->9
Consume->9

No comments:

Post a Comment