一个使用了队列的通用实现:
http://blog.csdn.net/chaosllgao/archive/2009/05/23/4211183.aspx
此文描述了一种更简单的模型
1. 同时只有1个生产者和1个消费者
2. 不用队列,同时只有一个产品
3. 生产者每次生产1个0到100之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行
import java.util.Random;
public class ProducerConsumer
{
public static void main(String[] args)
{
Product product = new Product();
Producer producer = new Producer(product);
Consumer consumer = new Consumer(product);
producer.start();
consumer.start();
}
private static class Product
{
public int value = -1;
}
private static class Producer extends Thread
{
private Product product = null;
public Producer(Product product)
{
this.product = product;
}
public void run()
{
Random rand = new Random();
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value > 0)
{
product.wait();
}
product.value = rand.nextInt(101);
product.notifyAll();
if (product.value == 0)
{
break;
}
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Producer Terminated");
}
}
private static class Consumer extends Thread
{
private Product product = null;
public Consumer(Product product)
{
this.product = product;
}
public void run()
{
int i = 0;
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value < 0)
{
product.wait();
}
System.out.print(product.value + " ");
System.out.flush();
i++;
if (i % 10 == 0)
{
System.out.println();
}
product.notifyAll();
if (product.value == 0)
{
break;
}
product.value = -1;
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Consumer Terminated");
}
}
}