package Thread;
class Consumer extends Thread {
private Good gObj;
Consumer(Good g) {
gObj = g;
}
public void run() {
synchronized (gObj) {
try {
if(gObj.get().equals(""))
{
System.out.println("Consumer waiting for good to be available");
gObj.wait();
}
System.out.println("Got a good-->" + gObj.get());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Good {
private String item = "";
public void set(String str) {
item = str;
}
public String get() {
return item;
}
}
public class Producer implements Runnable {
private Good gObj;
Producer(Good g) {
gObj = g;
}
public void run() {
synchronized (gObj)
{
if(gObj.get().equals(""))
{
System.out.println("Going to produce an item");
gObj.set("hi");
gObj.notify();
}
}
}
public static void main(String[] args) {
Good g = new Good();
Producer p = new Producer(g);
Thread producerThread = new Thread(p);
Consumer c = new Consumer(g);
c.start();
producerThread.start();
}
}