




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河 北 建 筑 工 程 学 院实 验 报 告 年 月 日班级物联142姓名孙胜杰学号评分实验台号同组人员实验名称经典进程同步问题-生产者消费者问题模拟实现课程名称操作系统仪 器 名 称型号规格仪器编号装有eclipse软件和Java开发环境的PC机一台一 实验目的1 深刻理解进程同步的概念。2 掌握经典同步问题,生产者消费者问题。二 实验设备PC机三 实验内容 在Java开发环境下模拟经典进程同步问题,生产者消费者问题。四 程序的主要代码package 生产者与消费者问题;import java.util.LinkedList; import java.util.Scanner;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暂时不能执行生产任务!); 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)?);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 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) this.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); / 调用仓库Storage的生产函数 public void produce(int num) duce(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 extends 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; public 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(storage); 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); Producer 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); 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(进行生产操作(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)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(请输入要消费的产品数量:);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.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等软件运行。程序目录为:生产者与消费者问题生产者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省耒阳市2025届初三下学期第二次月考试题数学试题试卷含解析
- 辽宁省沈阳市一三四中学2025届初三下学期周练试卷(四)生物试题含解析
- 山西省大同市左云县东北小学校2024-2025学年数学四下期末学业水平测试试题含解析
- 吉林城市职业技术学院《Spss统计软件》2023-2024学年第二学期期末试卷
- 山东政法学院《犯罪心理学专题》2023-2024学年第一学期期末试卷
- 皖北卫生职业学院《机械制图Ⅰ》2023-2024学年第二学期期末试卷
- 上海市复旦附中2025届高三补习班下学期第四次月考数学试题含解析
- 钦州幼儿师范高等专科学校《民族戏曲与说唱艺术》2023-2024学年第一学期期末试卷
- 山东省2025届数学三下期末考试试题含解析
- 四川省棠湖中学2024-2025学年高三语文试题高考冲刺七含解析
- 医院膀胱镜科室管理制度
- 语法专题 非谓语动词重难点分类强化及练习答案 -2022届高考英语总复习
- 《种树郭橐驼传》说课稿 统编版高中语文选择性必修下册
- UV真空镀膜涂料漆膜性能参考介绍
- 2023年海南省海口市美兰区六年级数学第二学期期末质量检测试题含解析
- 销售问题与二元一次方程组
- 各类酒店造价估算指标
- 曳引驱动电梯安装施工方案
- 2023年民兵整组存在的问题
- 2022-2023学年北京市大兴区八年级(下)期中物理试卷含答案解析
- 人教版《小数的初步认识》
评论
0/150
提交评论