package test.notifywait; import java.util.LinkedList; import java.util.Queue; import java.util.Random; public class NotifyWaitTest { public static void main(String args[]) { Queue<Integer> queue = new LinkedList<Integer>(); Producer p = new Producer(queue); Consumer c = new Consumer(queue); p.produce(); c.consume(); } } class Producer { private Queue<Integer> queue; private static Random r = new Random(50); public Producer(Queue<Integer> queue) { this.queue = queue; } public void produce() { Thread pt = new Thread(new Runnable() { @Override public void run() { int count = 100; synchronized (queue) { while (count-- > 0) { int i = r.nextInt(); queue.add(i); queue.notify(); // System.out.println(count); } } } }); pt.start(); } } class Consumer { private Queue<Integer> queue; public Consumer(Queue<Integer> queue) { this.queue = queue; } public void consume() { Thread cm = new Thread(new Runnable() { @Override public void run() { int count = 100; synchronized (queue) { try { if (queue.isEmpty()) { queue.wait(); } } catch (InterruptedException ie) { System.out.println(ie.getMessage()); } while (count-- > 0) { int i = queue.poll(); System.out.println("Consume " + i); } } } }); cm.start(); } }