生产者--消费者问题

阅读更多

自己在网上搜集了一些资料,然后又根据自己的理解写的,如果有问题,请指出,我将改正

 

 

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 container = new LinkedList(); // 作为缓冲区
	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 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();
				}
			}
		}

	}
}
   

                            
                        
                    
                    
                    

你可能感兴趣的:(生产者,消费者,java,线程同步与互斥)