Object Notify&Wait

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();
	}
}
相關文章
相關標籤/搜索