/** 
	Date: 20/05/2011
	PROGRAM: ProducerConsumerTest.java (Producer-Consumer implementation)
	EXECUTION: java ProducerConsumerTest

*/

public class ProducerConsumerTest {
    public static void main(String[] args) {
        Buffer b = new Buffer();
        Producer p1 = new Producer(b, 1);
        Consumer c1 = new Consumer(b, 1);

        p1.start();
        c1.start();
		//p1.start();
    }
}


class Buffer {
    private int contents;
    private boolean available = false;

    public int get() {
 
        available = false;
        return contents;
    }


    public void put(int value) {

        contents = value;
        available = true;
    }
}

class Producer extends Thread {
    private Buffer buf;
    private int number;

    public Producer(Buffer b, int number) {
        buf = b;
        this.number = number;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            buf.put(i);
            System.out.println("Producer #" + this.number
                               + " put: " + i);
        }
    }
}

class Consumer extends Thread {
    private Buffer buf;
    private int number;

    public Consumer(Buffer b, int number) {
        buf = b;
        this.number = number;
    }

    public void run() {
        int value = 0;
        for (int i = 0; i < 10; i++) {
            value = buf.get();
            System.out.println("Consumer #" + this.number
                               + " got: " + value);
        }
    }
}

