版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信控学院java程序设计实验PAGE实验报告课程名称: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(); ductNum=productNum; ducts=newProduct[productNum]; this.initBuffersPool(); } //初始化该缓冲区 publicvoidinitBuffersPool() { for(inti=0;i<products.length;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<products.length;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<products.length;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<products.length;i++) { if(products[i].getProductId().equals("-1")) { k=i; break; } } returnk; }}Product.java:packagepro_con;//产品publicclassProduct{privateStringproductId; publicStringgetProductId() { returnproductId; } publicvoidsetProductId(StringproductId) { ductId=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<idList.length) { 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏南京浦口交通建设集团有限公司下属子公司招聘10人笔试历年参考题库附带答案详解
- 2025广西梧州市长洲区招聘直属国有企业领导人员工作6人笔试历年参考题库附带答案详解
- 2025年秋季江苏钟吾大数据发展集团有限公司招聘工作人员拟录用人员笔试历年参考题库附带答案详解
- 2025年下半年安庆同安控股有限责任公司下属子公司招聘4人笔试历年参考题库附带答案详解
- 2025山东省日照市水务集团有限公司招聘4人笔试历年参考题库附带答案详解
- 2025山东政控人力资源有限公司招聘政府购买服务人员8人笔试历年参考题库附带答案详解
- 2025安徽省白湖阀门厂有限责任公司招聘合同制用工人员招聘数核减笔试历年参考题库附带答案详解
- 2025安徽六安市融资担保有限公司招聘有关工作笔试历年参考题库附带答案详解
- 2025四川长虹电子控股集团有限公司招聘13人笔试历年参考题库附带答案详解
- 2025四川省盐业总公司自贡分公司营销人员招聘9人笔试历年参考题库附带答案详解
- 矿业融资项目计划书模板范例
- 2025年拥抱Z世代珠宝行业数字化转型与文化变革报告
- 浙江省温州市直遴选笔试真题及解析(2025年7月27日)
- 安全知识竞赛填空试题及答案
- GM/T 0028-2024密码模块安全要求
- 水池维修维护方案(3篇)
- 3.1 《中国科学技术史》序言(节选)(课件)中职高二语文(高教版2023拓展上册)
- 2025年华为数通中级H12-821(V1.0)认证考试复习题库
- GB/T 45568-2025继电保护信息规范
- T/CHES 42-2020水质涕灭威、克百威和甲萘威的测定液相色谱法
- 网络基础知识专题课件
评论
0/150
提交评论