JAVA线程同步生产者/消费者简单例子

public class TestProducerConsumer {
  public static void main(String[] args) {
     StoreRoom sr = new StoreRoom();
     Producer p1 = new Producer(sr,"制造一部");
     Producer p2 = new Producer(sr,"制造二部");
     Consumer c1 = new Consumer(sr,"销售一部");
     Consumer c2 = new Consumer(sr,"销售二部");
     Thread t1 = new Thread(p1);
     Thread t2 = new Thread(p2);
     Thread t3 = new Thread(c1);
     Thread t4 = new Thread(c2);
     t1.start(); t2.start();t3.start(); t4.start();
  }
}

class Product {
  int id;
  String producedBy;
  String consumedBy;
   Product(int id,String producedBy) {
    this.id = id;
    this.producedBy = producedBy;
  }
  public void consume(String consumedBy) {
    this.consumedBy = consumedBy;
  }
  public String toString() {
    return "该产品的,生产部门是:" + producedBy +",销售部门是:" + consumedBy;    
  }
  public String getProducedBy() {
    return producedBy;
  }
  public String getConsumedBy() {
    return consumedBy;
  }
  public int getID() {
    return this.id;
  }      
}
 
class StoreRoom {
  Product[] pL = new Product[6];
  int index = 0;
  public synchronized void push(Product p) throws Exception {
     while(index == pL.length) {
        System.out.println(p.getProducedBy() + "仓库满了,请你歇歇稍等");
        this.wait();
     }
     pL[index] = p; 
     index ++;
     System.out.println(p.getProducedBy() + "已经生产了" + p.getID() +"个,销售部门快来取货卖");
     notifyAll();
  }     
  public synchronized Product pop(String s) throws Exception {
     while(index == 0) {
        System.out.println(s + "  仓库没货了,请你歇歇稍等");
        this.wait();
     }
     index--;
     Product product = pL[index];
     product.consume(s);
     System.out.println(s + "已经拿走了一个,制造部门赶快生产");
     notifyAll();
     return product;
  }     
  
}      

class Producer implements Runnable{
   StoreRoom sr;String s;
   Producer(StoreRoom sr,String s) {
     this.sr = sr;
     this.s = s;
   } 
   public void run() {
     int i = 0;
     while(true) {
       i++;
       Product p = new Product(i,s);
        try{
         sr.push(p);
        }
        catch(Exception e) {
        }  
     } 
   }   
}

class Consumer implements Runnable{
   StoreRoom sr;String s;
   Consumer(StoreRoom sr,String s) {
   this.sr = sr;
   this.s = s;
    } 
    public void run() {
      while(true) {
         try{
          sr.pop(s);
         }
         catch(Exception e) {
          }  
       } 
      } 
}          

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值