生产者-消费者模式

转载 2015年07月06日 17:21:08
package thread.cusproc;
/**
 * 仓库类,在这里面实现生产和消费。同步互斥。
 * @author sunniwell
 *
 */
public class WareHouse {
/**
* 最大仓储量
*/
private static final int MAX_COUNT = 100;

private int currentCount;

public WareHouse(int currentCount){
this.currentCount = currentCount;
}

/**
* 生产
* @param needNum 需要生产的数量
*/
public synchronized void produce(int needNum){
while(currentCount+needNum > MAX_COUNT){
System.out.println("要生产的数量("+needNum+")超过了当前仓库可产量("+(MAX_COUNT-currentCount)+"),暂停生产。");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//简单地更改库存量,表示生产业务。
currentCount += needNum;
System.out.println("生产了"+needNum+"个产品,当前库存量为"+currentCount);
notifyAll();
}

/**
* 消费
* @param needNum 需要消费的数量
*/
public synchronized void consume(int needNum){
while(currentCount < needNum){
System.out.println("要消费的数量("+needNum+")超过了当前仓库量("+(currentCount)+"),暂停消费。");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//简单地更改库存量,表示消费业务。
currentCount -= needNum;
System.out.println("消费了"+needNum+"个产品,当前库存量为"+currentCount);
notifyAll();
}

}


package thread.cusproc;

public class Producer extends Thread {
private WareHouse house;
private int needNum;

public Producer(WareHouse house, int needNum){
this.house = house;
this.needNum = needNum;
}

@Override
public void run() {
house.produce(needNum);
}

}


package thread.cusproc;

public class Consumer extends Thread {
private WareHouse house;
private int needNum;

public Consumer(WareHouse house, int needNum){
this.house = house;
this.needNum = needNum;
}

@Override
public void run() {
house.consume(needNum);
}

}


package thread.cusproc;

public class Test {
public static void main(String[] args) {
WareHouse house = new WareHouse(20);

Consumer c1 = new Consumer(house, 30);
Consumer c2 = new Consumer(house, 60);
Consumer c3 = new Consumer(house, 20);

Producer p1 = new Producer(house, 40);
Producer p2 = new Producer(house, 10);
Producer p3 = new Producer(house, 10);
Producer p4 = new Producer(house, 15);
Producer p5 = new Producer(house, 50);

c1.start();
c2.start();
c3.start();

p1.start();
p2.start();
p3.start();
p4.start();
p5.start();

}
}


生产者消费者模式+定时任务demo

  • 2017年04月12日 12:05
  • 34KB
  • 下载

架构设计 生产者消费者模式

  • 2015年05月06日 19:36
  • 130KB
  • 下载

生产者-消费者模式(阻塞队列实现)

生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。这篇文章我们来看看什么是生产者消费者模式,这个问...

生产者 消费者 模式 c++

  • 2014年04月25日 07:25
  • 19KB
  • 下载

Java 生产者消费者模式

  • 2015年10月22日 17:43
  • 10KB
  • 下载

生产者消费者模式的两个问题及其改进

举例1: class Info{ private String title; private String content; public String getTitl...

生产者和消费者模式多线程

  • 2017年07月26日 09:57
  • 2KB
  • 下载

Qt C++11 生产者消费者模式类

  • 2017年07月11日 21:56
  • 2KB
  • 下载

多任务并发之生产者消费者模式应用

生产者-消费者模式大家都很熟悉,生产者负责生产数据,并存放到队列中,消费者负责从队列中取出数据来消费。可以看出生产者和消费者之间不直接通讯,是通过队列来通讯的。 生产者和消费者是抽象的概念,可以是线程...
  • guozebo
  • guozebo
  • 2016年05月28日 22:58
  • 2726

生产者与消费者模式

  • 2015年04月19日 20:46
  • 137KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生产者-消费者模式
举报原因:
原因补充:

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