自己在网上搜集了一些资料,然后又根据自己的理解写的,如果有问题,请指出,我将改正
package cn.henu.sjg.producerAndConsumer; import java.util.LinkedList; import java.util.Scanner; /** * 生产者--消费者问题 * @author Shang Jianguo * @2012-12-10 下午9:42:17 */ public class ProducerAndConsumer { private LinkedList<Object> container = new LinkedList<Object>(); // 作为缓冲区 private int MAX = 10; // 缓冲区中商品的最多数量 private boolean isEmpty = true;// 标志缓冲区是否为空 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入生产者数目:"); int pnum = sc.nextInt(); System.out.println("请输入消费者数目:"); int cnum = sc.nextInt(); ProducerAndConsumer pac = new ProducerAndConsumer(); for(int i=0;i<pnum;i++){ pac.new Producer("生产者" + i).start(); } for(int i=0;i<cnum;i++){ pac.new Consumer("消费者" + i).start(); } } /** * 生产者类 * @author Shang Jianguo * @2012-12-10 下午9:42:36 */ class Producer extends Thread { public Producer(String name) { super(name); } @Override public void run() { while (true) { synchronized (container) { if (isEmpty) {// 缓冲区为空并且没有生产 if (MAX > container.size()) {// 向缓冲区中添加商品 container.add("产品" + container.size()); System.out.println(getName() + "生产了产品--" + container.getLast() ); } isEmpty = false; container.notifyAll(); } else { try {// 没有产品,线程等待 container.notifyAll(); container.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } /** * 消费者类 * @author shangjianguo */ class Consumer extends Thread { public Consumer(String name) { super(name); } @Override public void run() { while (true) { synchronized (container) { try { container.wait(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } if (!isEmpty) {// 有商品 Object good = container.removeLast(); System.out.println(getName() + " 消费了商品:" + good); if (container.isEmpty()) {// 没有商品了 isEmpty = true; } container.notifyAll(); } else { System.out.println(getName() + ":没有商品了!"); try { container.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { sleep(1000); } catch (InterruptedException e2) { e2.printStackTrace(); } container.notifyAll(); } } } } }
0票
开心
0票
板砖
0票
感动
0票
有用
0票
疑问
0票
难过
0票
无聊
0票
震惊
顶
踩