生产消费问题整合版

转载 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
  • 下载

生产消费问题模拟实现

  • 2013年07月11日 22:42
  • 249KB
  • 下载

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

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

生产与消费问题C#实验

  • 2009年05月12日 14:25
  • 121KB
  • 下载

MFC多线程程序生产消费问题

  • 2008年11月02日 16:59
  • 11KB
  • 下载

JAVA进阶6.8——生产消费问题

//仓库类 class CangKu { private char[] rl = new char[8]; // rl=容量 仓库最大容量为8. private int wuPin = 0; //...

生产消费问题

  • 2008年05月28日 15:06
  • 1.81MB
  • 下载

多线程之生产消费问题

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

多线程多生产多消费问题以及解决

多生产多消费 之前的代码针对一个生产一个消费问题可以解决同步问题。但不适应与多个生产与多个消费的问题。 package cn.java.thread.communication; //在set()和g...

java多线程之生产消费问题

一:多线程中生产者,消费者问题生产者生产产品,消费者消费产品,无产品的时候,消费者无法消费,有产品的时候生产者不需要生产。(始终只有一个产品的情况) 生产消费模型中存在的问题:1,初始状态下,无产品...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生产消费问题整合版
举报原因:
原因补充:

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