生产消费问题整合版

转载 2013年12月05日 10:36:57

代码如下:

public class SynchronizedExample {

 /**
  * 生产仓库
  * @author fancy
  *
  */
 private static class Factory {
  //最大库存量
  public static final int MAX_SIZE = 100;
  //当前存储数量
  public int currentNum;
  
  public Factory() {}
  
  public Factory(int currentNum) {
   this.currentNum = currentNum;
  }
  
  /**
   * 生产指定数量的产品
   */
  public synchronized void produce(int needNum) {
   while (needNum + currentNum > MAX_SIZE) {
    System.out.println("最多只能生产 " + (MAX_SIZE - currentNum) + " , 无法满足需求的数量 " + needNum);
    try {
     wait();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   //满足条件后生产之并更新当前库存
   currentNum += needNum;
   System.out.println("已经生产了 " + needNum + " , 当前的库存数量为 " + currentNum);
   //唤醒在此对象上监听器上等待的所有线程
   notifyAll();
  }
  
  /**
   * 消费者库存
   */
  public synchronized void consume(int needNum) {
   //需求量大于当前库存
   while (needNum > currentNum) {
    System.out.println("当前可消费库存只有 " + currentNum + " , 无法满足需求 " + needNum);
    try {
     wait();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   
   currentNum -= needNum;
   System.out.println("已经消费了 " + needNum + " , 当前的库存数量为 " + currentNum);
   notifyAll();
  }
 }
 
 /**
  * 生产者
  */
 private static class Productor extends Thread {
  private int needNum;
  private Factory mFactory;
  
  public Productor(int needNum, Factory mFactory) {
   this.needNum = needNum;
   this.mFactory = mFactory;
  }

  @Override
  public void run() {
   mFactory.produce(needNum);
  }
 }
 
 /**
  * 消费者
  */
 private static class Customer extends Thread {
  private int needNum;
  private Factory mFactory;
  
  public Customer(int needNum, Factory mFactory) {
   this.needNum = needNum;
   this.mFactory = mFactory;
  }
  
  @Override
  public void run() {
   mFactory.consume(needNum);
  }
  
 }
 
 public static void main(String[] args) {
  Factory mFactory = new Factory(100);
  Customer mCustomer = new Customer(30, mFactory);
  Customer mCustomer2 = new Customer(50, mFactory);
  Productor mProductor = new Productor(170, mFactory);
  
  mCustomer.start();
  mCustomer2.start();
  mProductor.start();
 }
}



相关文章推荐

操作系统的生产消费问题

  • 2010-05-28 14:15
  • 1.58MB
  • 下载

多线程之生产消费问题

问题:一个仓库最多容纳6个产品,制造商现在要制造20件产品存入仓库,消费者要从仓库取出20件产品来消费

生产消费问题模拟实现

  • 2013-07-11 22:42
  • 249KB
  • 下载

生产与消费问题C#实验

  • 2009-05-12 14:25
  • 121KB
  • 下载

Java中多线程的多生产多消费问题的解决方案

/*创建线程的第二种方式1、实现Runnable接口2、覆盖run方法3、通过Thread类创建线程对象4、将Runnable接口的子类对象作为实参传递给Thread类中的构造函数5、调用start方...

生产消费问题

  • 2008-05-28 15:06
  • 1.81MB
  • 下载

java多线程之生产消费问题

一:多线程中生产者,消费者问题生产者生产产品,消费者消费产品,无产品的时候,消费者无法消费,有产品的时候生产者不需要生产。(始终只有一个产品的情况) 生产消费模型中存在的问题:1,初始状态下,无产品...

Java并发(八)生产消费问题&虚假唤醒

描述生产消费问题在java多线程的学习中是经常遇到的问题 ,多个线程共享通一个资源的时候会出现各种多线程中经常出现的各种问题。实例说明三个类:售货员Clerk,工厂Factory,消费者Consume...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)