实验报告生产者.docx

上传人:b****6 文档编号:12325556 上传时间:2023-06-05 格式:DOCX 页数:11 大小:65.97KB
下载 相关 举报
实验报告生产者.docx_第1页
第1页 / 共11页
实验报告生产者.docx_第2页
第2页 / 共11页
实验报告生产者.docx_第3页
第3页 / 共11页
实验报告生产者.docx_第4页
第4页 / 共11页
实验报告生产者.docx_第5页
第5页 / 共11页
实验报告生产者.docx_第6页
第6页 / 共11页
实验报告生产者.docx_第7页
第7页 / 共11页
实验报告生产者.docx_第8页
第8页 / 共11页
实验报告生产者.docx_第9页
第9页 / 共11页
实验报告生产者.docx_第10页
第10页 / 共11页
实验报告生产者.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验报告生产者.docx

《实验报告生产者.docx》由会员分享,可在线阅读,更多相关《实验报告生产者.docx(11页珍藏版)》请在冰点文库上搜索。

实验报告生产者.docx

实验报告生产者

实验报告

 

课程名称:

java程序设计

题目:

生产者消费者

院(系):

信息与控制工程

专业班级:

计算机1202

姓名:

张金涛

学号:

120620226

指导教师:

张翔

2014年12月17月

 

一、实验目的

实现生产者-消费者问题,深刻理解进程同步问题。

 

二、实验环境

装有jdk及eclipse的计算机一台

三、实验内容

Java程序实现生产者消费者问题

四、代码及注释

packagepro_con;

 

publicclassMain

{

publicstaticvoidmain(String[]args)

{

newMain().start();

}

publicvoidstart()

{

Buffersbuffers=newBuffers(5);

String[]idList4={"5","6"};

String[]idList7={"1","3","5"};

newPro_Thread("生产者1",buffers,5,"1").start();

newPro_Thread("生产者2",buffers,4,"2").start();

newPro_Thread("生产者3",buffers,2,"3").start();

newPro_Thread("生产者5",buffers,7,"5").start();

newPro_Thread("生产者6",buffers,1,"6").start();

newCon_Thread("消费者4",buffers,6,idList4).start();

newCon_Thread("消费者7",buffers,3,idList7).start();

}

}

Buffers.java:

packagepro_con;

//缓冲区

publicclassBuffers

{

privateintproductNum;//缓冲单元数目

publicstaticProductproducts[];//缓冲区队列

privateintcount=0;//记录使用的缓冲区单元

publicBuffers(intproductNum)

{

super();

this.productNum=productNum;

this.products=newProduct[productNum];

this.initBuffersPool();

}

//初始化该缓冲区

publicvoidinitBuffersPool()

{

for(inti=0;i

{

products[i]=newProduct();

products[i].setProductId("-1");

}

}

//取出产品

publicsynchronizedProductget(Stringid)

{

Productproduct=null;

while(count==0)

{

try

{

super.wait();

}catch(InterruptedExceptione)

{

e.printStackTrace();

}

}

this.notifyAll();

intx=-1;

inti=0;

for(i=0;i

{

if(products[i].getProductId().equals(id))

{

x=i;

product=products[i];

products[i].setProductId("-1");

break;

}

}

while(i==products.length)

{

try

{

super.wait();

for(i=0;i

{

if(products[i].getProductId()==id)

{

x=i;

product=products[i];

products[i].setProductId("-1");

break;

}

}

}catch(InterruptedExceptione)

{

e.printStackTrace();

}

}

notifyAll();System.out.println(Thread.currentThread().getName()+"开始消费\t"+id+"产品");

count--;

System.out.println(Thread.currentThread().getName()+"成功消费\t"+id+"产品\n");

System.out.println("缓冲区["+x+"]\t"+products[x]+"\n");

returnproduct;

}

//添加产品

publicsynchronizedbooleanput(StringproductId)

{

booleanbool=false;

//如果满了,就等待消费者消费

while(count==products.length)

{

try{

super.wait();

}catch(Exceptione){

e.printStackTrace();

}

}

this.notifyAll();

inti=findPutLocation();

System.out.println(Thread.currentThread().getName()+"开始在\t缓冲区"

+i+"\t生产");

bool=true;

products[i].setProductId(productId);

count++;

System.out.println(Thread.currentThread().getName()+"完成生产\n");

System.out.println("缓冲区["+i+"]\t"+products[i]+"\n");

returnbool;

}

//找一个合适的位置

publicsynchronizedintfindPutLocation()

{

intk=0;

for(inti=0;i

{

if(products[i].getProductId().equals("-1"))

{

k=i;

break;

}

}

returnk;

}

}

Product.java:

packagepro_con;

//产品

publicclassProduct

{

privateStringproductId;

publicStringgetProductId()

{

returnproductId;

}

publicvoidsetProductId(StringproductId)

{

this.productId=productId;

}

publicStringtoString()

{

returnproductId;

}

}

消费者线程:

Con_Thread.java:

packagepro_con;

publicclassCon_ThreadextendsThread

{

privatestaticfinalintbaseTime=1000;

privateStringidList[];//消费者消费产品

privateintn;//延迟时间

privateBuffersbuffers;

privateinti=0;

publicCon_Thread(Stringname,Buffersbuffers,intn,StringidList[])

{

super(name);

this.idList=idList;

this.n=n;

this.buffers=buffers;

}

@Override

publicvoidrun()

{

while(i

{

try

{

Thread.sleep(n*baseTime);

System.out.println(Thread.currentThread().getName()+"请求消费\t"

+idList[i]+"产品");

buffers.get(idList[i]);

++i;

}catch(InterruptedExceptione)

{

e.printStackTrace();

}

}

}

}

生产者线程:

Pro_Thread.java:

packagepro_con;

publicclassPro_ThreadextendsThread

{

privatestaticfinalintbaseTime=1000;

privateBuffersbuffers;

privateintn;

privateStringid;

publicPro_Thread(Stringname,Buffersbuffers,intn,Stringid)

{

super(name);

this.n=n;

this.buffers=buffers;

this.id=id;

}

@Override

publicvoidrun()

{

try

{

Thread.sleep(n*baseTime);

System.out.println(Thread.currentThread().getName()+"发出请求生产信号");

buffers.put(id);

}catch(InterruptedExceptione)

{

e.printStackTrace();

}

}

}

运行结果

五、实验总结

通过本次实验,进一步提升了我在编程中分析问题,我深刻理解进程同步问题,也体会到了编程中细心、耐心、恒心的重要性,相信我会在今后的实验中有更多的进步。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2