Thursday 7 May 2015

Producer and Consumer - Wait(),Notify

 
Producer and consumer example for wait(),notify() of thread
 
import java.util.Vector;
 
class Producer extends Thread {
 
    static final int MAXQUEUE = 5;
    private Vector messages = new Vector();
 
    @Override
    public void run() {
        try {
            while (true) {
                putMessage();
                //sleep(5000);
            }
        } catch (InterruptedException e) {
        }
    }
 
    private synchronized void putMessage() throws InterruptedException {
        while (messages.size() == MAXQUEUE) {
            wait();
        }
        messages.addElement(new java.util.Date().toString());
        System.out.println("put message");
        notify();
        //Later, when the necessary event happens, the thread 
that is running it calls notify() from a block synchronized on the same object.
    }
 
    // Called by Consumer
    public synchronized String getMessage() throws InterruptedException {
        notify();
        while (messages.size() == 0) {
            wait();//By executing wait() from a synchronized block,
 a thread gives up its hold on the lock and goes to sleep.
        }
        String message = (String) messages.firstElement();
        messages.removeElement(message);
        return message;
    }
}
 
class Consumer extends Thread {
 
    Producer producer;
 
    Consumer(Producer p) {
        producer = p;
    }
 
    @Override
    public void run() {
        try {
            while (true) {
                String message = producer.getMessage();
                System.out.println("Got message: " + message);
                //sleep(200);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String args[]) {
        Producer producer = new Producer();
        producer.start();
        new Consumer(producer).start();
    }
}


Output

Got message: Fri Mar 02 21:37:21 EST 2015
put message
put message
put message
put message
put message
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015
put message
put message
put message
put message
put message
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015
Got message: Fri Mar 02 21:37:21 EST 2015

No comments:

Post a Comment