class ThreadH {
    public static void main(String[] arg) {
        ProducerH p = new ProducerH();
        new ConsumerH().start();
        p.start();
    }
}
class ProducerH extends Thread {
    static int data = 0;
    public void run() {
        for (int i = 0; i < 10; i++) {
            inc();
        }
    }
    synchronized static void inc() {
        try {
            while (data >= 3) ProducerH.class.wait();
        } catch (InterruptedException e) {
        }
        System.out.println("Producer " + ++data);
        ProducerH.class.notify();
    }
}
class ConsumerH extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            synchronized (ProducerH.class) {
                try {
                    while (ProducerH.data <= 0) ProducerH.class.wait();
                } catch (InterruptedException e) {
                }
                System.out.println("Consumer " + --ProducerH.data);
                ProducerH.class.notify();
            }
        }
    }
}

