Producer & Consumer

本文介绍了一个简单的生产者消费者模型实现,通过定义一个储物罐类作为两者交互的中介,使用同步方法和等待-通知机制来确保生产和消费过程的正确执行。
/** 
*    
*/
 
package mythread; 

/** 
* @author daniel zhou    
* 演示生产者、消费者模型 
*/
 
public class WaitAndNotify { 

  /** 
    * @param args 
    */
 
  public static void main(String[] args) {    
    // 定义一个储物罐 
    Queue q = new Queue(); 
    // 生产者 
    producer p = new producer(q); 
    // 消费者 
    consumer c = new consumer(q); 
    // 开始生产、消费过程 
    p.start(); 
    c.start(); 
    System.gc(); 
  } 



/** 
*    
* @author daniel zhou 储物罐,用作存储生产者的产品 
*/
 
class Queue { 
  // 产品编号 
  int value; 
  // 有无产品标示 
  boolean flag = false

  // 生产 
  public synchronized void put(int i) { 
    // 为空则放置,并通知消费者去取产品,自己则开始等待 
    if (!flag ) { 
      value = i; 
      flag = true
      // 通知消费者 
      notify(); 
    } 

    // 开始等待 
    try { 
      wait(); 
    } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 

    
  // 消费 
  public synchronized int get() { 
    // 有产品则取,并标示已经置空,通知生产者放置,自己开始等待 
    if (!flag ) { 

      // 开始等待 
      try { 
        wait(); 
      } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 

    // 通知生产者并返回产品 
    flag = false
    notify(); 
    return value; 
  } 

    


/** 
*    
* @author daniel zhou 消费者 
*/
 
class consumer extends Thread { 
  Queue q; 

  public consumer(Queue q) { 
    this.q = q; 
  } 

  // 消费10个产品 
  public void run() {    
    //这个while必须要 
    while(true){ 
      System.out.println("消费者消费了第" + q.get() + "个产品"); 
    } 
  } 


/** 
*    
* @author daniel zhou 生产者 
*/
 
class producer extends Thread { 
  Queue q; 
    
  public producer(Queue q) { 
    this.q = q; 
  } 

  // 生产10个产品 
  public void run() { 
    for (int i = 0; i < 10; i++) { 
      q.put(i); 
      System.out.println("生产者放置了第" + i + "个产品"); 
    } 
  } 





     本文转自danni505 51CTO博客,原文链接:http://blog.51cto.com/danni505/213478,如需转载请自行联系原作者



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值