生产者消费者报告(共21页).doc

上传人:飞****2 文档编号:15120521 上传时间:2022-05-11 格式:DOC 页数:21 大小:815.50KB
返回 下载 相关 举报
生产者消费者报告(共21页).doc_第1页
第1页 / 共21页
生产者消费者报告(共21页).doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《生产者消费者报告(共21页).doc》由会员分享,可在线阅读,更多相关《生产者消费者报告(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上河 北 建 筑 工 程 学 院实 验 报 告 年 月 日班级物联142姓名孙胜杰学号评分实验台号同组人员实验名称经典进程同步问题-生产者消费者问题模拟实现课程名称操作系统仪 器 名 称型号规格仪器编号装有eclipse软件和Java开发环境的PC机一台一 实验目的1 深刻理解进程同步的概念。2 掌握经典同步问题,生产者消费者问题。二 实验设备PC机三 实验内容 在Java开发环境下模拟经典进程同步问题,生产者消费者问题。四 程序的主要代码package 生产者与消费者问题;import java.util.LinkedList; import java.util.Sc

2、anner;class Storage / 仓库最大存储量 private final int MAX_SIZE = 100; / 仓库存储的载体 private LinkedList list = new LinkedList(); / 生产num个产品 public void produce(int num) / 同步代码段 synchronized (list) / 如果仓库剩余容量不足 while (list.size() + num MAX_SIZE) System.out.println(要生产的产品数量: + num + t库存量: + list.size() +t暂时不能执行生

3、产任务!); System.out.println(进行生产操作(1),还是消费操作(0)?);try / 由于条件不满足,生产阻塞 list.wait(); catch (InterruptedException e) e.printStackTrace(); / 生产条件满足情况下,生产num个产品 for (int i = 1; i = num; +i) list.add(new Object(); System.out.println(已经生产产品数: + num + t现库存量: + list.size(); System.out.println(进行生产操作(1),还是消费操作(0

4、)?);list.notifyAll(); / 消费num个产品 public void consume(int num) / 同步代码段 synchronized (list) / 如果仓库存储量不足 while (list.size() num) System.out.println(要消费的产品数量: + num + t库存量: + list.size() + t暂时不能执行生产任务!); System.out.println(进行生产操作(1),还是消费操作(0)?);try / 由于条件不满足,消费阻塞 list.wait(); catch (InterruptedException

5、 e) e.printStackTrace(); / 消费条件满足情况下,消费num个产品 for (int i = 1; i = num; +i) list.remove(); System.out.println(已经消费产品数: + num + t现库存量为: + list.size(); System.out.println(进行生产操作(1),还是消费操作(0)?);list.notifyAll(); / get/set方法 public LinkedList getList() return list; public void setList(LinkedList list) th

6、is.list = list; public int getMAX_SIZE() return MAX_SIZE; /生产者类Producer继承线程类Thread class Producer extends Thread / 每次生产的产品数量 private int num; / 所在放置的仓库 private Storage storage; / 构造函数,设置仓库 public Producer(Storage storage) this.storage = storage; / 线程run函数 public void run() produce(num); / 调用仓库Storag

7、e的生产函数 public void produce(int num) storage.produce(num); / get/set方法 public int getNum() return num; public void setNum(int num) this.num = num; public Storage getStorage() return storage; public void setStorage(Storage storage) this.storage = storage; /消费者类Consumer继承线程类Thread class Consumer extend

8、s Thread / 每次消费的产品数量 private int num; / 所在放置的仓库 private Storage storage; / 构造函数,设置仓库 public Consumer(Storage storage) this.storage = storage; / 线程run函数 public void run() consume(num); / 调用仓库Storage的生产函数 public void consume(int num) storage.consume(num); / get/set方法 public int getNum() return num; pu

9、blic void setNum(int num) this.num = num; public Storage getStorage() return storage; public void setStorage(Storage storage) this.storage = storage; public class ProducerAndConsumer public static void main(String args) / 仓库对象 Storage storage = new Storage(); / 生产者对象 Producer p1 = new Producer(stora

10、ge); Producer p2 = new Producer(storage); Producer p3 = new Producer(storage); Producer p4 = new Producer(storage); Producer p5 = new Producer(storage); Producer p6 = new Producer(storage); Producer p7 = new Producer(storage);Producer p8= new Producer(storage); Producer p9 = new Producer(storage); P

11、roducer p10 = new Producer(storage); / 消费者对象 Consumer c1 = new Consumer(storage); Consumer c2 = new Consumer(storage); Consumer c3 = new Consumer(storage); Consumer c4 = new Consumer(storage); Consumer c5 = new Consumer(storage);Consumer c6 = new Consumer(storage); Consumer c7 = new Consumer(storage

12、); Consumer c8 = new Consumer(storage); Consumer c9 = new Consumer(storage); Consumer c10 = new Consumer(storage);System.out.println(已生产产品数量:0t已消费产品数量:0t库存量:0t最大存储空间:100);System.out.println(进行生产操作(1),还是消费操作(0)?);Scanner isProduer=new Scanner(System.in);for(int i =1;i10;i+)/System.out.println(进行生产操作(

13、1),还是消费操作(0)?);if(isProduer.nextInt()=1)System.out.print(请输入要生产的产品数量:);Scanner p11=new Scanner(System.in);if(i=1)p1.setNum(p11.nextInt();p1.start();else if(i=2)p2.setNum(p11.nextInt();p2.start();else if(i=3)p3.setNum(p11.nextInt();p3.start();else if(i=4)p4.setNum(p11.nextInt();p4.start();else if(i=5

14、)p5.setNum(p11.nextInt();p5.start();else if(i=6)p6.setNum(p11.nextInt();p6.start();else if(i=7)p7.setNum(p11.nextInt();p7.start();else if(i=8)p8.setNum(p11.nextInt();p8.start();else if(i=9)p9.setNum(p11.nextInt();p9.start();else if(i=10)p10.setNum(p11.nextInt();p10.start();elseSystem.out.print(请输入要消

15、费的产品数量:);Scanner p12=new Scanner(System.in);if(i=1)c1.setNum(p12.nextInt();c1.start();else if(i=2)c2.setNum(p12.nextInt();c2.start();else if(i=3)c3.setNum(p12.nextInt();c3.start();else if(i=4)c4.setNum(p12.nextInt();c4.start();else if(i=5)c5.setNum(p12.nextInt();c5.start();else if(i=6)c6.setNum(p12.

16、nextInt();c6.start();else if(i=7)c7.setNum(p12.nextInt();c7.start();else if(i=8)c8.setNum(p12.nextInt();c8.start();else if(i=9)c9.setNum(p12.nextInt();c9.start();else if(i=10)c10.setNum(p12.nextInt();c10.start(); 五、实验结果本程序应用Java软件开发,没有引入界面,需要使用可以运行java的eclipse等软件运行。程序目录为:生产者与消费者问题生产者消费者问题代码src生产者与消费者问题 下的ProducerAndConsumer.java文件。程序运行后,界面如图所示:此时,输入1表示进入生产操作,输入0表示进入消费操作.。当输入1时,显示如下:现在输入要生产的产品数量。一直重复该操作,直至如图情况:此时表示存储空间已满,不能继续进行生产操作。下面进行消费操作:此时,消费20个后,库存量仍不足以生产之前的40个,生产操作继阻塞。下面继续进行消费操作:此时,消费50个,库存量为28,已经足够进行之前阻塞的生产40个的操作,具体情况如上图所示。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁