关闭

生产者消费者问题理解与Java实现

发表于:2013-10-18 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:xuxg    来源:51Testing软件测试网采编

  仓库类
package org.dennist.thread.demo;
/**
*
*  StoreHouse.java
*
*  @version : 1.1
*
*  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
*
*  @since     : 1.0        创建时间:    2013-2-25        上午08:55:33
*
*  TODO     :    仓库
*
*/
public class StoreHouse {
private int base = 0;
private int top = 0;
//仓库大小
private Product[] products = new Product[10];
/**
* 生产产品
* @param product
*/
public synchronized void push(Product product){
if(top==products.length){    //如果仓库已满,等待消费
try {
System.out.println("仓库已满,正在等待消费..");
wait();
}catch (InterruptedException e) {
System.out.println("stop push product because other reasons");
}
}
//仓库未满,将生产的产品入库
products[top] = product;
//库中产品数量+1
top++;
}
/**
* 消费产品
* @return
*/
public synchronized Product pop() {
Product product = null;
while (top == base) {     //仓库未空,不能消费
notify();
try {
System.out.println("仓库已空,正等待生产...");
wait();
} catch (InterruptedException e) {
System.out.println("stop push product because other reasons");
}
}
//仓库未空,等待消费
top--;
product = products[top];
products[top] = null;
return product;
}
}
  生产者类
package org.dennist.thread.demo;
/**
*
*  Producer.java
*
*  @version : 1.1
*
*  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
*
*  @since     : 1.0        创建时间:    2013-2-25        上午08:53:16
*
*  TODO     :    生产者
*
*/
public class Producer implements Runnable{
private String producerName ;
private StoreHouse storeHouse ;
public Producer(String producerName, StoreHouse storeHouse) {
this.producerName = producerName;
this.storeHouse = storeHouse;
}
public void setProducerName(String producerName) {
this.producerName = producerName;
}
public String getProducerName() {
return producerName;
}
@Override
public void run() {
execProcuct();
}
private void execProcuct() {
int i = 0;
while(true){
i++;
Product pro = new Product(i);
storeHouse.push(pro);
System.out.println(getProducerName() + " 生产了 " + pro);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
return;
}
}
}
}
42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号