生产与消费者模型

生产者消费者模型
四步骤
生产者在仓满时等待,空仓则生产
消费者在仓满时取物,在仓空时等待
生产者在仓空时生产并通知消费者消费
消费者在仓满时取出产品并通知生产者

其实就我个人的认识与理解,生产者与消费者就是对于同一件东西或资源进行操作。生产者生成,消费者对其生成的东西进行消费

这里我给一个简单的生产消费模型:
生产者:
public class produce extends Thread{
	
	//声明一个队列对象,用来存储
	private LinkedList list ;
	int count =0 ;
	/**
	 *构造器 
	 *
	 */
	public produce(LinkedList list){
		this.list = list ;
	}
	
	
	/**
	 *重写run方法
	 */
	public void run(){
		while(true){
		try {
			Thread.sleep(1000);
			
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		synchronized(list){
			
			while(list.size()==0){
				//生产产品
				Box box = new Box();
				box.id = ++count;
				box.name = "app"+box.id;
				list.add(box);
				
				list.notify();
			}
			while(list.size()>0){
				try {
					list.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			
			
			
		}
		
		}
	}
	
	

}


消费者:
public class customer extends Thread{
	//声明一个队列来存储
	private LinkedList list ;
	
	
	/**
	 * 构造方法
	 */
	
	public customer(LinkedList list){
		
		this.list = list ;
	
	} 
	public void run(){
		
		while(true){
		synchronized (list) {
			
			//判断队列是否为空
			while(list.size()==0){
				try {
					list.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			while(list.size()>0){
				
				System.out.println("消费者拿走了产品!"+ list.getFirst().toString() );
				list.remove();
				list.notify();
				
			}
			
			
			
		}
		}
	}
}


我在这只写了一个最简单的模型,生产者在队列为空时生产,不为空时则等待;消费者在队列为空时等待,在队列不为空时的消费。
生产者与消费者模型,我觉得用双缓冲对列实现更为灵活。这里实现双缓冲与线程同步有关,线程同步我会在以后再说的。线程同步的关键字啊:synchronized 。

猜你喜欢

转载自978499985.iteye.com/blog/1779394