四步骤
生产者在仓满时等待,空仓则生产
消费者在仓满时取物,在仓空时等待
生产者在仓空时生产并通知消费者消费
消费者在仓满时取出产品并通知生产者
其实就我个人的认识与理解,生产者与消费者就是对于同一件东西或资源进行操作。生产者生成,消费者对其生成的东西进行消费
这里我给一个简单的生产消费模型:
生产者:
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 。